| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd";> |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| <html> |
| <head> |
| <link rel="shortcut icon" href="http://aries.apache.org/images/favicon.ico"></link> |
| <link type="text/css" rel="stylesheet" href="http://aries.apache.org/resources/site.css"></link> |
| </script><script src="http://aries.apache.org/resources/menus.js" language="javascript" type="text/javascript"></script> |
| <meta name="keywords" content="..."/> |
| <meta name="description" content="..." /> |
| <title> |
| Apache Aries - BlueprintAnnotation |
| </title> |
| </head> |
| <body onload="SetMenu()"> |
| |
| <table width="100%" cellpadding="0" cellspacing="0"> |
| <tr width="100%"> |
| <td id="cell-0-0" colspan="2"> </td> |
| <td id="cell-0-1"> </td> |
| <td id="cell-0-2" colspan="2"> </td> |
| </tr> |
| <tr width="100%"> |
| <td id="cell-1-0"> </td> |
| <td id="cell-1-1"> </td> |
| <td id="cell-1-2"> |
| <div style="padding: 5px;"> |
| <div id="banner"> |
| <!-- Banner --> |
| <table border="0" cellpadding="0" cellspacing="0" width="100%"> |
| <tr> |
| <td align="left" class="topbardiv" nowrap=""> |
| <a href="http://aries.apache.org/" title="Apache Aries"> <img border="0" src="http://aries.apache.org/images/Arieslogo_Horizontal.gif"> </a> |
| </td> |
| <td align="right" nowrap=""> |
| <a href="http://www.apache.org/" title="The Apache Software Foundation"> <img border="0" src="http://aries.apache.org/images/apache_feather.png"> </a> |
| </td> |
| </tr> |
| </table> |
| <!-- Banner --> |
| </div> |
| </div> |
| <div id="top-menu"> |
| <table border="0" cellpadding="1" cellspacing="0" width="100%"> |
| <tr> |
| <td> |
| <div align="left"> |
| <!-- Breadcrumbs --> |
| <!-- Breadcrumbs --> |
| </div> |
| </td> |
| <td> |
| <div align="right"> |
| <!-- Quicklinks --> |
| <DIV style="padding: 5px 5px 0px 25px;"> |
| <FORM action="http://www.google.com/search" method="get" style="font-size: 10px;"> |
| <A href="http://www.apache.org/licenses/LICENSE-2.0.html" class="external-link" rel="nofollow">License</A> |
| <INPUT name="ie" type="hidden" value="UTF-8"></INPUT> |
| <INPUT name="oe" type="hidden" value="UTF-8"></INPUT> |
| <INPUT maxlength="255" name="q" size="15" type="text" value></INPUT> |
| <INPUT name="btnG" type="submit" value="Search"></INPUT> |
| <INPUT name="domains" type="hidden" value="aries.apache.org"></INPUT> |
| <INPUT name="sitesearch" type="hidden" value="aries.apache.org"></INPUT> |
| </FORM> |
| </DIV> |
| <!-- Quicklinks --> |
| </div> |
| </td> |
| </tr> |
| </table> |
| </div> |
| </td> |
| <td id="cell-1-3"> </td> |
| <td id="cell-1-4"> </td> |
| </tr> |
| <tr width="100%"> |
| <td id="cell-2-0" colspan="2"> </td> |
| <td id="cell-2-1"> |
| <table> |
| <tr height="100%" valign="top"> |
| <td height="100%"> |
| <div id="wrapper-menu-page-right"> |
| <div id="wrapper-menu-page-top"> |
| <div id="wrapper-menu-page-bottom"> |
| <div id="menu-page"> |
| <!-- NavigationBar --> |
| <style type="text/css"> |
| /* The following code is added by mdx_elementid.py |
| It was originally lifted from http://subversion.apache.org/style/site.css */ |
| /* |
| * Hide class="elementid-permalink", except when an enclosing heading |
| * has the :hover property. |
| */ |
| .headerlink, .elementid-permalink { |
| visibility: hidden; |
| } |
| h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> |
| <div onclick="SwitchMenu('documentation')" id="documentationTitle" class="menutitle">Documentation</div> |
| |
| <div id="documentation" class="menuitemgroup"> |
| <div class="menuitem"> |
| <a href="/documentation/integrators-guide.html">Integrators Guide</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/documentation/articles.html">Articles</a> |
| </div> |
| <div class="menuitem"> |
| <a href="https://svn.apache.org/repos/asf/aries/slides/">Slides</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/documentation/tutorials.html">Tutorials</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/documentation/tools.html">Tools</a> |
| </div> |
| </div> |
| |
| <div onclick="SwitchMenu('modules')" id="modulesTitle" class="menutitle">Modules</div> |
| |
| <div id="modules" class="menuitemgroup"> |
| <div class="menuitem"> |
| <a href="/modules/samples.html">Samples</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/async-svcs.html">Asynchronous Services</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/blueprint.html">Blueprint</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/blueprint-maven-plugin.html">Blueprint-maven-plugin</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/blueprintannotation.html">Blueprint Annotations</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/blueprintnoosgi.html">Blueprint No-OSGi</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/blueprintweb.html">Blueprint Web</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/containers.html">Containers</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/esaanttask.html">ESA Ant Task </a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/ebamavenpluginproject.html">EBA Maven Plugin </a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/esamavenpluginproject.html">ESA Maven Plugin </a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/jmx.html">JMX</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/jndiproject.html">JNDI</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/jpaproject.html">JPA</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/transactioncontrol.html">Transaction Control Service</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/transactionsproject.html">Transactions</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/rsa.html">Remote Service Admin (RSA)</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/spi-fly.html">SPI Fly</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/subsystems.html">Subsystems</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/applications.html">Applications (obsolete)</a> |
| </div> |
| </div> |
| |
| <div onclick="SwitchMenu('downloads')" id="downloadsTitle" class="menutitle">Downloads</div> |
| |
| <div id="downloads" class="menuitemgroup"> |
| <div class="menuitem"> |
| <a href="/downloads/currentreleases.html">Current Releases</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/downloads/testresults.html">Compliance Tests</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/downloads/archived-releases.html">Archived Releases</a> |
| </div> |
| </div> |
| |
| <div onclick="SwitchMenu('community')" id="communityTitle" class="menutitle">Community</div> |
| |
| <div id="community" class="menuitemgroup"> |
| <div class="menuitem"> |
| <a href="/community/resources.html">Community Resources</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/community/gettinginvolved.html">Getting Involved</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/community/people.html">Who we are</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/community/boardreports.html">Board Reports</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/community/logos.html">Logos for Users</a> |
| </div> |
| </div> |
| |
| <div onclick="SwitchMenu('development')" id="developmentTitle" class="menutitle">Development</div> |
| |
| <div id="development" class="menuitemgroup"> |
| <div class="menuitem"> |
| <a href="/development/buildingaries.html">Building Aries </a> |
| </div> |
| <div class="menuitem"> |
| <a href="/development/guidelines.html">Cording Guidelines</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/development/architecture.html">Architecture</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/development/releasingaries.html">Releasing Aries </a> |
| </div> |
| <div class="menuitem"> |
| <a href="/development/compliancetesting.html">OSGi Compliance Tests </a> |
| </div> |
| <div class="menuitem"> |
| <a href="/development/maintainingthewebpages.html">Web Site Maintenance </a> |
| </div> |
| </div> |
| |
| <div onclick="SwitchMenu('sponsorship')" id="sponsorshipTitle" class="menutitle">Sponsorship</div> |
| |
| <div id="sponsorship" class="menuitemgroup"> |
| <div class="menuitem"> |
| <a href="http://www.apache.org/foundation/thanks.html">Thanks</a> |
| </div> |
| <div class="menuitem"> |
| <a href="http://www.apache.org/foundation/sponsorship.html">Sponsoring Apache</a> |
| </div> |
| </div> |
| |
| <div class="promotion"> |
| <a href="http://www.apache.org/events/current-event.html"> |
| <img src="http://www.apache.org/events/current-event-125x125.png" width="125" height="125"/> |
| </a> |
| </div> |
| <!-- NavigationBar --> |
| </div> |
| </div> |
| </div> |
| </div> |
| </td> |
| <td height="100%" width="100%"> |
| <!-- Content --> |
| <div class="wiki-content"><style type="text/css"> |
| /* The following code is added by mdx_elementid.py |
| It was originally lifted from http://subversion.apache.org/style/site.css */ |
| /* |
| * Hide class="elementid-permalink", except when an enclosing heading |
| * has the :hover property. |
| */ |
| .headerlink, .elementid-permalink { |
| visibility: hidden; |
| } |
| h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> |
| <p><a name="BlueprintAnnotation-Introduction"></a></p> |
| <h1 id="introduction">Introduction<a class="headerlink" href="#introduction" title="Permanent link">¶</a></h1> |
| <p>Blueprint annotation is being prototyped in Apache Aries in |
| trunk/blueprint. The blueprint annotation service is an optional service |
| to the blueprint core and should not affect the blueprint core if |
| annotation supported is not required. If the blueprint annotation service |
| is available, the bundle contains no blueprint definition XML and the |
| bundle contains the manifest header <em>Bundle-Blueprint-Annotation</em> with |
| the value set to true, the blueprint annotation service will attempt to |
| scan the bundle for blueprint annotations, such as @Blueprint, @Bean, |
| @Service, @Reference, @ReferenceList, etc. The blueprint annotation api is |
| available in trunk/blueprint/blueprint-annotation-api module, while the |
| blueprint implementation is available in |
| trunk/blueprint/blueprint-annotatiom-impl module. A blueprint annotated |
| sample is also provided in trunk/blueprint/blueprint-sample-annotation.</p> |
| <p><a name="BlueprintAnnotation-OverviewofAvailableblueprintAnnotations"></a></p> |
| <h2 id="overview-of-available-blueprint-annotations">Overview of Available blueprint Annotations<a class="headerlink" href="#overview-of-available-blueprint-annotations" title="Permanent link">¶</a></h2> |
| <p><a name="BlueprintAnnotation-@InjectAnnotation"></a></p> |
| <h3 id="inject-annotation">@Inject Annotation<a class="headerlink" href="#inject-annotation" title="Permanent link">¶</a></h3> |
| <p>@Inject annotation can be used to inject fields or methods.</p> |
| <div class="codehilite"><pre><span class="p">@</span><span class="n">Bean</span><span class="p">(</span><span class="n">id</span><span class="p">=</span>"<span class="n">bar</span>"<span class="p">)</span> |
| <span class="n">public</span> <span class="n">class</span> <span class="n">Bar</span> <span class="p">{</span> |
| |
| <span class="p">@</span><span class="n">Inject</span><span class="p">(</span><span class="n">value</span><span class="p">=</span>"<span class="n">Hello</span> <span class="n">FooBar</span>"<span class="p">)</span> |
| <span class="n">private</span> <span class="n">String</span> <span class="n">value</span><span class="p">;</span> |
| |
| <span class="p">@</span><span class="n">Inject</span><span class="p">(</span><span class="n">ref</span><span class="p">=</span>"<span class="n">blueprintBundleContext</span>"<span class="p">)</span> |
| <span class="n">private</span> <span class="n">BundleContext</span> <span class="n">context</span><span class="p">;</span> |
| <span class="p">...</span> |
| <span class="p">}</span> |
| </pre></div> |
| |
| |
| <p><a name="BlueprintAnnotation-@BeanAnnotation"></a></p> |
| <h3 id="bean-annotation">@Bean Annotation<a class="headerlink" href="#bean-annotation" title="Permanent link">¶</a></h3> |
| <p>You can annotate a bean using @Bean annotation. The bean id is currently |
| required, even tho it is possible we may want to the annotation service to |
| auto generate one in the future. Optionally, you can also specify |
| activation, dependsOn, description, scope, factoryRef, factoryMethod and |
| args of the bean.</p> |
| <p>* Example of using args property for the @Bean annotation.</p> |
| <div class="codehilite"><pre><span class="p">@</span><span class="n">Bean</span><span class="p">(</span><span class="n">id</span><span class="p">=</span>"<span class="n">accountOne</span>"<span class="p">,</span> <span class="n">args</span><span class="p">=@</span><span class="n">Arg</span><span class="p">(</span><span class="n">value</span><span class="p">=</span>"1"<span class="p">))</span> |
| <span class="n">public</span> <span class="n">class</span> <span class="n">Account</span> <span class="p">{</span> |
| |
| <span class="n">private</span> <span class="n">long</span> <span class="n">accountNumber</span><span class="p">;</span> |
| |
| <span class="n">public</span> <span class="n">Account</span><span class="p">(</span><span class="n">long</span> <span class="n">number</span><span class="p">)</span> <span class="p">{</span> |
| <span class="n">this</span><span class="p">.</span><span class="n">accountNumber</span> <span class="p">=</span> <span class="n">number</span><span class="p">;</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| </pre></div> |
| |
| |
| <p>* Example of using factoryMethod and args properties for the @Bean |
| annotation</p> |
| <div class="codehilite"><pre><span class="p">@</span><span class="n">Bean</span><span class="p">(</span><span class="n">id</span><span class="p">=</span>"<span class="n">accountTwo</span>"<span class="p">,</span> |
| <span class="n">factoryMethod</span><span class="p">=</span>"<span class="n">createAccount</span>"<span class="p">,</span> |
| <span class="n">args</span> <span class="p">=</span> <span class="p">@</span><span class="n">Arg</span><span class="p">(</span><span class="n">value</span><span class="p">=</span>"2"<span class="p">))</span> |
| <span class="n">public</span> <span class="n">class</span> <span class="n">StaticAccountFactory</span> <span class="p">{</span> |
| |
| <span class="n">public</span> <span class="n">static</span> <span class="n">Account</span> <span class="n">createAccount</span><span class="p">(</span><span class="n">long</span> <span class="n">number</span><span class="p">)</span> <span class="p">{</span> |
| <span class="k">return</span> <span class="n">new</span> <span class="n">Account</span><span class="p">(</span><span class="n">number</span><span class="p">);</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| </pre></div> |
| |
| |
| <p>* Example of using factoryRef, factoryMethod, and args properties for the |
| @Bean annotation</p> |
| <div class="codehilite"><pre><span class="p">@</span><span class="n">Bean</span><span class="p">(</span><span class="n">id</span><span class="p">=</span>"<span class="n">accountThree</span>"<span class="p">,</span> |
| <span class="n">factoryRef</span><span class="p">=</span>"<span class="n">accountFactory</span>"<span class="p">,</span> |
| <span class="n">factoryMethod</span><span class="p">=</span>"<span class="n">createAccount</span>"<span class="p">,</span> |
| <span class="n">args</span><span class="p">=@</span><span class="n">Arg</span><span class="p">(</span><span class="n">value</span><span class="p">=</span>"3"<span class="p">))</span> |
| <span class="n">public</span> <span class="n">class</span> <span class="n">NewAccount</span> <span class="p">{</span> |
| |
| <span class="n">private</span> <span class="n">long</span> <span class="n">accountNumber</span><span class="p">;</span> |
| |
| <span class="n">public</span> <span class="n">NewAccount</span><span class="p">(</span><span class="n">long</span> <span class="n">number</span><span class="p">)</span> <span class="p">{</span> |
| <span class="n">this</span><span class="p">.</span><span class="n">accountNumber</span> <span class="p">=</span> <span class="n">number</span><span class="p">;</span> |
| <span class="p">}</span> |
| <span class="p">...</span> |
| <span class="p">}</span> |
| </pre></div> |
| |
| |
| <p><a name="BlueprintAnnotation-@Service,@RegistrationListener,@Register,@UnregisterAnnotations"></a></p> |
| <h3 id="service-registrationlistener-register-unregister-annotations">@Service, @RegistrationListener, @Register, @Unregister Annotations<a class="headerlink" href="#service-registrationlistener-register-unregister-annotations" title="Permanent link">¶</a></h3> |
| <p>If you want to register a bean as a service, you can use @Service |
| annotation to do so. You can specify ranking, autoExport, interfaces, |
| serviceProperties and registrationListeners for the service.</p> |
| <div class="codehilite"><pre><span class="p">@</span><span class="n">Bean</span><span class="p">(</span><span class="n">id</span><span class="p">=</span>"<span class="n">foo</span>"<span class="p">)</span> |
| <span class="p">@</span><span class="n">Service</span><span class="p">(</span><span class="n">autoExport</span><span class="p">=</span>"<span class="n">all</span><span class="o">-</span><span class="n">classes</span>"<span class="p">,</span> |
| <span class="n">serviceProperties</span> <span class="p">=</span> |
| <span class="p">@</span><span class="n">ServiceProperty</span><span class="p">(</span><span class="n">key</span><span class="p">=</span>"<span class="n">blueprint</span><span class="p">.</span><span class="n">annotation</span><span class="p">.</span><span class="n">sample</span>"<span class="p">,</span> <span class="n">value</span><span class="p">=</span>"<span class="n">true</span>"<span class="p">),</span> |
| <span class="n">registerationListeners</span> <span class="p">=</span> |
| <span class="p">@</span><span class="n">RegistrationListener</span><span class="p">(</span><span class="n">ref</span><span class="p">=</span>"<span class="n">fooRegistrationListener</span>"<span class="p">),</span> |
| <span class="n">ranking</span><span class="p">=</span>0<span class="p">)</span> |
| <span class="n">public</span> <span class="n">class</span> <span class="n">Foo</span> <span class="n">implements</span> <span class="n">Serializable</span> <span class="p">{</span> |
| <span class="p">...</span> |
| <span class="p">}</span> |
| </pre></div> |
| |
| |
| <p>To annotation a class as registration listener, you can use the |
| @RegistrationListener annotation. @Register can be used to annotate the |
| register-method for the registration listener and @Unregister annotation |
| can be used on the unregister-method for the registration listener.</p> |
| <div class="codehilite"><pre><span class="p">@</span><span class="n">Bean</span><span class="p">(</span><span class="n">id</span><span class="p">=</span>"<span class="n">fooRegistrationListener</span>"<span class="p">)</span> |
| <span class="p">@</span><span class="n">RegistrationListener</span> |
| <span class="n">public</span> <span class="n">class</span> <span class="n">FooRegistrationListener</span> <span class="p">{</span> |
| |
| <span class="p">@</span><span class="n">Register</span> |
| <span class="n">public</span> <span class="n">void</span> <span class="n">serviceRegistered</span><span class="p">(</span><span class="n">Serializable</span> <span class="n">foo</span><span class="p">,</span> <span class="n">Map</span> <span class="n">props</span><span class="p">)</span> <span class="p">{</span> |
| <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span>"<span class="n">Service</span> <span class="n">registration</span> <span class="n">notification</span><span class="p">:</span> " <span class="o">+</span> <span class="n">foo</span> <span class="o">+</span> " |
| " <span class="o">+</span> <span class="n">props</span><span class="p">);</span> |
| <span class="p">}</span> |
| |
| <span class="p">@</span><span class="n">Unregister</span> |
| <span class="n">public</span> <span class="n">void</span> <span class="n">serviceUnregistered</span><span class="p">(</span><span class="n">Foo</span> <span class="n">foo</span><span class="p">,</span> <span class="n">Map</span> <span class="n">props</span><span class="p">)</span> <span class="p">{</span> |
| <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span>"<span class="n">Service</span> <span class="n">unregistration</span> <span class="n">notification</span><span class="p">:</span> " <span class="o">+</span> <span class="n">foo</span> <span class="o">+</span> |
| " " <span class="o">+</span> <span class="n">props</span><span class="p">);</span> |
| <span class="p">}</span> |
| |
| <span class="p">}</span> |
| </pre></div> |
| |
| |
| <p><a name="BlueprintAnnotation-@Reference,@ReferenceList,@ReferenceListenerAnnotations"></a></p> |
| <h3 id="reference-referencelist-referencelistener-annotations">@Reference, @ReferenceList, @ReferenceListener Annotations<a class="headerlink" href="#reference-referencelist-referencelistener-annotations" title="Permanent link">¶</a></h3> |
| <p>For a bean that you want to act as a ReferenceListener, you can use |
| @ReferenceListener to annotate the bean class. </p> |
| <p>For the service that you want to inject the reference, you can use the |
| @Inject and @Reference annotation, with the id, serviceInterface, timeout |
| and referenceListeners properties specified for the reference. </p> |
| <div class="codehilite"><pre><span class="p">@</span><span class="n">Bean</span><span class="p">(</span><span class="n">id</span><span class="p">=</span>"<span class="n">bindingListener</span>"<span class="p">)</span> |
| <span class="p">@</span><span class="n">ReferenceListener</span> |
| <span class="n">public</span> <span class="n">class</span> <span class="n">BindingListener</span> <span class="p">{</span> |
| |
| <span class="p">@</span><span class="n">Inject</span> <span class="p">@</span><span class="n">Reference</span> <span class="p">(</span><span class="n">id</span><span class="p">=</span>"<span class="n">ref2</span>"<span class="p">,</span> |
| <span class="n">serviceInterface</span> <span class="p">=</span> <span class="n">InterfaceA</span><span class="p">.</span><span class="n">class</span><span class="p">,</span> |
| <span class="n">timeout</span><span class="p">=</span>100<span class="p">,</span> |
| <span class="n">referenceListeners</span><span class="p">=@</span><span class="n">ReferenceListener</span><span class="p">(</span><span class="n">ref</span><span class="p">=</span>"<span class="n">bindingListener</span>"<span class="p">))</span> |
| <span class="n">private</span> <span class="n">InterfaceA</span> <span class="n">a</span><span class="p">;</span> |
| <span class="p">...</span> |
| <span class="p">@</span><span class="n">Init</span> |
| <span class="n">public</span> <span class="n">void</span> <span class="n">init</span><span class="p">()</span> <span class="p">{</span> |
| <span class="p">}</span> |
| |
| <span class="p">@</span><span class="n">Bind</span> |
| <span class="n">public</span> <span class="n">void</span> <span class="n">bind</span><span class="p">(</span><span class="n">InterfaceA</span> <span class="n">a</span><span class="p">,</span> <span class="n">Map</span> <span class="n">props</span><span class="p">)</span> <span class="p">{</span> |
| <span class="n">this</span><span class="p">.</span><span class="n">a</span> <span class="p">=</span> <span class="n">a</span><span class="p">;</span> |
| <span class="n">this</span><span class="p">.</span><span class="n">props</span> <span class="p">=</span> <span class="n">props</span><span class="p">;</span> |
| <span class="p">}</span> |
| |
| <span class="p">@</span><span class="n">Unbind</span> |
| <span class="n">public</span> <span class="n">void</span> <span class="n">unbind</span><span class="p">(</span><span class="n">InterfaceA</span> <span class="n">a</span><span class="p">,</span> <span class="n">Map</span> <span class="n">props</span><span class="p">)</span> <span class="p">{</span> |
| <span class="n">this</span><span class="p">.</span><span class="n">a</span> <span class="p">=</span> <span class="n">null</span><span class="p">;</span> |
| <span class="n">this</span><span class="p">.</span><span class="n">props</span> <span class="p">=</span> <span class="n">null</span><span class="p">;</span> |
| <span class="p">}</span> |
| |
| <span class="p">}</span> |
| </pre></div> |
| |
| |
| <p>@ReferenceList is very similar as @Reference, except that the timeout |
| property is not supported in @ReferenceList, while the memberType property |
| is supported in @ReferenceList. This is same as the blueprint XML schema.</p> |
| <div class="codehilite"><pre><span class="p">@</span><span class="n">Bean</span><span class="p">(</span><span class="n">id</span><span class="p">=</span>"<span class="n">listBindingListener</span>"<span class="p">)</span> |
| <span class="p">@</span><span class="n">ReferenceListener</span> |
| <span class="n">public</span> <span class="n">class</span> <span class="n">ListBindingListener</span> <span class="p">{</span> |
| |
| <span class="p">@</span><span class="n">Inject</span> <span class="p">@</span><span class="n">ReferenceList</span> <span class="p">(</span><span class="n">id</span><span class="p">=</span>"<span class="n">ref</span><span class="o">-</span><span class="n">list</span>"<span class="p">,</span> |
| <span class="n">serviceInterface</span> <span class="p">=</span> <span class="n">InterfaceA</span><span class="p">.</span><span class="n">class</span><span class="p">,</span> |
| |
| <span class="n">referenceListeners</span><span class="p">=@</span><span class="n">ReferenceListener</span><span class="p">(</span><span class="n">ref</span><span class="p">=</span>"<span class="n">listBindingListener</span>"<span class="p">))</span> |
| <span class="n">private</span> <span class="n">InterfaceA</span> <span class="n">a</span><span class="p">;</span> |
| <span class="p">...</span> |
| <span class="p">}</span> |
| </pre></div> |
| |
| |
| <p><a name="BlueprintAnnotation-@Blueprintannotation"></a></p> |
| <h3 id="blueprint-annotation">@Blueprint annotation<a class="headerlink" href="#blueprint-annotation" title="Permanent link">¶</a></h3> |
| <p>@Blueprint annotation can be used on any class to annotate the global |
| property of the blueprint bundle, such as defaultActivation, |
| defaultTimeout, defaultAvailability.</p> |
| <div class="codehilite"><pre><span class="p">@</span><span class="n">Blueprint</span><span class="p">(</span><span class="n">defaultActivation</span><span class="p">=</span>"<span class="n">eager</span>"<span class="p">,</span> <span class="n">defaultTimeout</span><span class="p">=</span>300<span class="p">,</span> |
| <span class="n">defaultAvailability</span><span class="p">=</span>"<span class="n">optional</span>"<span class="p">)</span> |
| <span class="p">@</span><span class="n">Bean</span><span class="p">(</span><span class="n">id</span><span class="p">=</span>"<span class="n">bar</span>"<span class="p">)</span> |
| <span class="n">public</span> <span class="n">class</span> <span class="n">Bar</span> <span class="p">{</span> |
| <span class="p">...</span> |
| <span class="p">}</span> |
| </pre></div> |
| |
| |
| <p><a name="BlueprintAnnotation-Typeconverters"></a></p> |
| <h3 id="type-converters">Type converters<a class="headerlink" href="#type-converters" title="Permanent link">¶</a></h3> |
| <p>If type converters are desired, you can use the @Bean annotation for it. |
| The blueprint annotation service will recognize it as a type converter if |
| it implements the <em>org.osgi.service.blueprint.container.Converter</em> |
| interface</p> |
| <div class="codehilite"><pre><span class="p">@</span><span class="n">Bean</span><span class="p">(</span><span class="n">id</span><span class="p">=</span>"<span class="n">converter1</span>"<span class="p">)</span> |
| <span class="n">public</span> <span class="n">class</span> <span class="n">DateTypeConverter</span> <span class="n">implements</span> <span class="n">Converter</span> <span class="p">{</span> |
| |
| <span class="p">@</span><span class="n">Inject</span><span class="p">(</span><span class="n">name</span><span class="p">=</span>"<span class="n">format</span>"<span class="p">,</span> <span class="n">value</span><span class="p">=</span>"<span class="n">yyyy</span><span class="p">.</span><span class="n">MM</span><span class="p">.</span><span class="n">dd</span>"<span class="p">)</span> |
| <span class="n">DateFormat</span> <span class="n">dateFormat</span><span class="p">;</span> |
| <span class="p">...</span> |
| <span class="p">}</span> |
| </pre></div> |
| |
| |
| <p><a name="BlueprintAnnotation-Limitation"></a></p> |
| <h3 id="limitation">Limitation<a class="headerlink" href="#limitation" title="Permanent link">¶</a></h3> |
| <p>Blueprint Annotation is still prototype work and currently only runtime |
| annotation scanning is supported. While it provides some basic useful |
| functions, there are still many things that you cannot do using annotation, |
| such as inject a list with values, inject inline beans, etc.</p></div> |
| <!-- Content --> |
| </td> |
| </tr> |
| </table> |
| </td> |
| <td id="cell-2-2" colspan="2"> </td> |
| </tr> |
| <tr width="100%"> |
| <td id="cell-3-0"> </td> |
| <td id="cell-3-1"> </td> |
| <td id="cell-3-2"> |
| <div id="footer"> |
| <!-- Footer --> |
| <div id="site-footer"> |
| <a href="http://aries.apache.org/privacy-policy.html";>Privacy |
| Policy</a> |
| </div> |
| <!-- Footer --> |
| </div> |
| </td> |
| <td id="cell-3-3"> </td> |
| <td id="cell-3-4"> </td> |
| </tr> |
| <tr width="100%"> |
| <td id="cell-4-0" colspan="2"> </td> |
| <td id="cell-4-1"> </td> |
| <td id="cell-4-2" colspan="2"> </td> |
| </tr> |
| </table> |
| </body> |
| </html> |