You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by bu...@apache.org on 2018/09/30 21:05:35 UTC
svn commit: r1035953 - in /websites/staging/felix/trunk/content: ./
documentation/subprojects/apache-felix-dependency-manager/reference/component-aspect.html
Author: buildbot
Date: Sun Sep 30 21:05:35 2018
New Revision: 1035953
Log:
Staging update by buildbot for felix
Modified:
websites/staging/felix/trunk/content/ (props changed)
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-dependency-manager/reference/component-aspect.html
Propchange: websites/staging/felix/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Sun Sep 30 21:05:35 2018
@@ -1 +1 @@
-1842411
+1842412
Modified: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-dependency-manager/reference/component-aspect.html
==============================================================================
--- websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-dependency-manager/reference/component-aspect.html (original)
+++ websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-dependency-manager/reference/component-aspect.html Sun Sep 30 21:05:35 2018
@@ -91,18 +91,29 @@ h2:hover > .headerlink, h3:hover > .head
<p>Aspects, as part of aspect oriented programming, can be used in a dynamic environment such as OSGi to "extend" existing services and add certain "capabilities" to them. Examples of these are adding a specific caching mechanism to a storage service or implementing logging. Aspects in OSGi can be applied to services and can be added and removed at runtime.</p>
<p>Aspects allow you to define an "interceptor", or chain of interceptors for a service to add features like caching or logging, etc. An aspect will be applied to any service that matches the specified interface and filter. For each matching service an aspect will be created based on the aspect implementation class. The aspect will be registered with the same interface and properties as the original service, plus any extra properties you supply here. It will also inherit all dependencies, and if you declare the original service as a member it will be injected.</p>
<h2 id="usage-example-using-annotation">Usage example using annotation<a class="headerlink" href="#usage-example-using-annotation" title="Permanent link">¶</a></h2>
-<p>The <em>@AspectService</em> annotation allows you to create an aspect service. It supports the following attributes mentioned below.</p>
+<p>The <em>@AspectService</em> annotation allows you to create an aspect service. In this example, a "DatabaseCache" aspect service is used to add caching functionality to an existing Database service:</p>
<h3 id="sample-code">Sample code<a class="headerlink" href="#sample-code" title="Permanent link">¶</a></h3>
-<div class="codehilite"><pre> <span class="p">@</span><span class="n">AspectService</span><span class="p">(</span><span class="n">ranking</span><span class="p">=</span>10<span class="p">)</span>
- <span class="p">@</span><span class="n">Property</span><span class="p">(</span><span class="n">name</span><span class="p">=</span>"<span class="n">param</span>"<span class="p">,</span> <span class="n">value</span><span class="p">=</span>"<span class="n">value</span>"<span class="p">)</span>
- <span class="n">class</span> <span class="n">AspectService</span> <span class="n">implements</span> <span class="n">InterceptedService</span> <span class="p">{</span>
- <span class="o">//</span> <span class="n">The</span> <span class="n">service</span> <span class="n">we</span> <span class="n">are</span> <span class="n">intercepting</span> <span class="p">(</span><span class="n">injected</span> <span class="n">by</span> <span class="n">reflection</span><span class="p">)</span>
- <span class="n">protected</span> <span class="n">volatile</span> <span class="n">InterceptedService</span> <span class="n">intercepted</span><span class="p">;</span>
-
- <span class="n">public</span> <span class="n">void</span> <span class="n">doWork</span><span class="p">()</span> <span class="p">{</span>
- <span class="n">intercepted</span><span class="p">.</span><span class="n">doWork</span><span class="p">();</span>
- <span class="p">}</span>
- <span class="p">}</span>
+<div class="codehilite"><pre><span class="kd">interface</span> <span class="nc">Database</span> <span class="o">{</span>
+ <span class="n">String</span> <span class="nf">get</span><span class="o">(</span><span class="n">String</span> <span class="n">key</span><span class="o">);</span>
+<span class="o">}</span>
+
+<span class="nd">@AspectService</span><span class="o">(</span><span class="n">ranking</span><span class="o">=</span><span class="mi">10</span><span class="o">)</span>
+<span class="kd">class</span> <span class="nc">DatabaseCache</span> <span class="kd">implements</span> <span class="n">Database</span> <span class="o">{</span>
+ <span class="kd">volatile</span> <span class="n">Database</span> <span class="n">originalDatabase</span><span class="o">;</span> <span class="c1">// injected</span>
+
+ <span class="nd">@ServiceDependency</span><span class="o">(</span><span class="n">required</span><span class="o">=</span><span class="kc">false</span><span class="o">)</span>
+ <span class="kd">volatile</span> <span class="n">LogService</span> <span class="n">log</span><span class="o">;</span>
+
+ <span class="n">String</span> <span class="nf">get</span><span class="o">(</span><span class="n">String</span> <span class="n">key</span><span class="o">)</span> <span class="o">{</span>
+ <span class="n">String</span> <span class="n">value</span> <span class="o">=</span> <span class="n">cache</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">key</span><span class="o">);</span>
+ <span class="k">if</span> <span class="o">(</span><span class="n">value</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
+ <span class="n">value</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="na">originalDatabase</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">key</span><span class="o">);</span>
+ <span class="n">store</span><span class="o">(</span><span class="n">key</span><span class="o">,</span> <span class="n">value</span><span class="o">);</span>
+ <span class="o">}</span>
+ <span class="k">return</span> <span class="n">value</span><span class="o">;</span>
+ <span class="o">}</span>
+ <span class="o">...</span>
+<span class="o">}</span>
</pre></div>
@@ -159,25 +170,6 @@ The AspectComponent can be created using
<span class="n">dm</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">aspectComponent</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
-
-<span class="kd">interface</span> <span class="nc">Database</span> <span class="o">{</span>
- <span class="n">String</span> <span class="nf">get</span><span class="o">(</span><span class="n">String</span> <span class="n">key</span><span class="o">);</span>
-<span class="o">}</span>
-
-<span class="kd">class</span> <span class="nc">DatabaseCache</span> <span class="kd">implements</span> <span class="n">Database</span> <span class="o">{</span>
- <span class="kd">volatile</span> <span class="n">Database</span> <span class="n">originalDatabase</span><span class="o">;</span> <span class="c1">// injected</span>
- <span class="kd">volatile</span> <span class="n">LogService</span> <span class="n">log</span><span class="o">;</span> <span class="n">Osgi</span> <span class="n">LogService</span><span class="o">,</span> <span class="n">optional</span> <span class="n">dependency</span>
-
- <span class="n">String</span> <span class="nf">get</span><span class="o">(</span><span class="n">String</span> <span class="n">key</span><span class="o">)</span> <span class="o">{</span>
- <span class="n">String</span> <span class="n">value</span> <span class="o">=</span> <span class="n">cache</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">key</span><span class="o">);</span>
- <span class="k">if</span> <span class="o">(</span><span class="n">value</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
- <span class="n">value</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="na">originalDatabase</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">key</span><span class="o">);</span>
- <span class="n">store</span><span class="o">(</span><span class="n">key</span><span class="o">,</span> <span class="n">value</span><span class="o">);</span>
- <span class="o">}</span>
- <span class="k">return</span> <span class="n">value</span><span class="o">;</span>
- <span class="o">}</span>
- <span class="o">...</span>
-<span class="o">}</span>
</pre></div>
@@ -194,7 +186,7 @@ The AspectComponent can be created using
<span class="o">}</span>
</pre></div>
<div class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;">
- Rev. 1842411 by pderop on Sun, 30 Sep 2018 20:55:53 +0000
+ Rev. 1842412 by pderop on Sun, 30 Sep 2018 21:05:18 +0000
</div>
<div class="trademarkFooter">
Apache Felix, Felix, Apache, the Apache feather logo, and the Apache Felix project