blob: 3f16a69d6964dda331470d9a6a0fc48712edd291 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_172) on Mon Oct 22 18:34:41 CEST 2018 -->
<title>AspectComponent</title>
<meta name="date" content="2018-10-22">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="AspectComponent";
}
}
catch(err) {
}
//-->
var methods = {"i0":6,"i1":6,"i2":6,"i3":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/apache/felix/dm/AdapterComponent.html" title="interface in org.apache.felix.dm"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../org/apache/felix/dm/BundleComponent.html" title="interface in org.apache.felix.dm"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/felix/dm/AspectComponent.html" target="_top">Frames</a></li>
<li><a href="AspectComponent.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.felix.dm</div>
<h2 title="Interface AspectComponent" class="title">Interface AspectComponent</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Superinterfaces:</dt>
<dd><a href="../../../../org/apache/felix/dm/AbstractComponent.html" title="interface in org.apache.felix.dm">AbstractComponent</a>, <a href="../../../../org/apache/felix/dm/Component.html" title="interface in org.apache.felix.dm">Component</a>&lt;<a href="../../../../org/apache/felix/dm/AspectComponent.html" title="interface in org.apache.felix.dm">AspectComponent</a>&gt;</dd>
</dl>
<hr>
<br>
<pre>public interface <span class="typeNameLabel">AspectComponent</span>
extends <a href="../../../../org/apache/felix/dm/Component.html" title="interface in org.apache.felix.dm">Component</a>&lt;<a href="../../../../org/apache/felix/dm/AspectComponent.html" title="interface in org.apache.felix.dm">AspectComponent</a>&gt;</pre>
<div class="block">Interface used to configure the various parameters needed when defining
a Dependency Manager aspect component.
Aspects allow you to define an interceptor, or chain of interceptors
for a service (to add features like caching or logging, etc ...). The dependency manager intercepts
the original service, and allows you to execute some code before invoking the original service ...
The aspect will be applied to any service that matches the specified interface and filter and
will be registered with the same interface and properties as the original service, plus any
extra properties you supply here. If you declare the original service as a member it will be injected.
<h3>Usage Examples</h3>
Here is a sample showing a DatabaseCache aspect which is created each time a Database interface is registered in the registry.
<blockquote><pre>
<code>
public class Activator extends DependencyActivatorBase {
&amp;Override
public void init(BundleContext context, DependencyManager dm) throws Exception {
Component aspectComponent = createAspectComponent()
.setAspect(Database.class, null, 10)
.setImplementation(DatabaseCache.class);
dm.add(aspectComponent);
}
}
interface Database {
String get(String key);
}
class DatabaseCache implements Database {
volatile Database originalDatabase; // injected
String get(String key) {
String value = cache.get(key);
if (value == null) {
value = this.originalDatabase.get(key);
store(key, value);
}
return value;
}
...
}
</code> </pre></blockquote>
<p> For "add", "change", "remove" callbacks, the following method signatures are supported:
<pre><code>
(Component comp, ServiceReference ref, Service service)
(Component comp, ServiceReference ref, Object service)
(Component comp, ServiceReference ref)
(Component comp, Service service)
(Component comp, Object service)
(Component comp)
(Component comp, Map properties, Service service)
(ServiceReference ref, Service service)
(ServiceReference ref, Object service)
(ServiceReference ref)
(Service service)
(Service service, Map propeerties)
(Map properties, Service, service)
(Service service, Dictionary properties)
(Dictionary properties, Service service)
(Object service)
</code></pre>
<p> For "swap" callbacks, the following method signatures are supported:
<pre><code>
(Service old, Service replace)
(Object old, Object replace)
(ServiceReference old, Service old, ServiceReference replace, Service replace)
(ServiceReference old, Object old, ServiceReference replace, Object replace)
(Component comp, Service old, Service replace)
(Component comp, Object old, Object replace)
(Component comp, ServiceReference old, Service old, ServiceReference replace, Service replace)
(Component comp, ServiceReference old, Object old, ServiceReference replace, Object replace)
(ServiceReference old, ServiceReference replace)
(Component comp, ServiceReference old, ServiceReference replace)
</code></pre></div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<ul class="blockList">
<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.felix.dm.Component">
<!-- -->
</a>
<h3>Nested classes/interfaces inherited from interface&nbsp;org.apache.felix.dm.<a href="../../../../org/apache/felix/dm/Component.html" title="interface in org.apache.felix.dm">Component</a></h3>
<code><a href="../../../../org/apache/felix/dm/Component.ServiceScope.html" title="enum in org.apache.felix.dm">Component.ServiceScope</a></code></li>
</ul>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code><a href="../../../../org/apache/felix/dm/AspectComponent.html" title="interface in org.apache.felix.dm">AspectComponent</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/felix/dm/AspectComponent.html#setAspect-java.lang.Class-java.lang.String-int-">setAspect</a></span>(java.lang.Class&lt;?&gt;&nbsp;service,
java.lang.String&nbsp;filter,
int&nbsp;ranking)</code>
<div class="block">Sets the service interface to apply the aspect to (required parameter)</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code><a href="../../../../org/apache/felix/dm/AspectComponent.html" title="interface in org.apache.felix.dm">AspectComponent</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/felix/dm/AspectComponent.html#setAspectCallbackInstance-java.lang.Object-">setAspectCallbackInstance</a></span>(java.lang.Object&nbsp;callbackInstance)</code>
<div class="block">Sets the instance to invoke the callbacks on (optional parameter).</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code><a href="../../../../org/apache/felix/dm/AspectComponent.html" title="interface in org.apache.felix.dm">AspectComponent</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/felix/dm/AspectComponent.html#setAspectCallbacks-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">setAspectCallbacks</a></span>(java.lang.String&nbsp;add,
java.lang.String&nbsp;change,
java.lang.String&nbsp;remove,
java.lang.String&nbsp;swap)</code>
<div class="block">Sets name of the callbacks method to invoke on add,change,remove, or swap callbacks (optional parameter).</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code><a href="../../../../org/apache/felix/dm/AspectComponent.html" title="interface in org.apache.felix.dm">AspectComponent</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/felix/dm/AspectComponent.html#setAspectField-java.lang.String-">setAspectField</a></span>(java.lang.String&nbsp;autoConfig)</code>
<div class="block">Sets the aspect implementation field name where to inject original service (optional parameter).</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.felix.dm.Component">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;org.apache.felix.dm.<a href="../../../../org/apache/felix/dm/Component.html" title="interface in org.apache.felix.dm">Component</a></h3>
<code><a href="../../../../org/apache/felix/dm/Component.html#add-org.apache.felix.dm.ComponentStateListener-">add</a>, <a href="../../../../org/apache/felix/dm/Component.html#add-org.apache.felix.dm.Dependency...-">add</a>, <a href="../../../../org/apache/felix/dm/Component.html#getServiceRegistration--">getServiceRegistration</a>, <a href="../../../../org/apache/felix/dm/Component.html#remove-org.apache.felix.dm.ComponentStateListener-">remove</a>, <a href="../../../../org/apache/felix/dm/Component.html#remove-org.apache.felix.dm.Dependency-">remove</a>, <a href="../../../../org/apache/felix/dm/Component.html#setAutoConfig-java.lang.Class-boolean-">setAutoConfig</a>, <a href="../../../../org/apache/felix/dm/Component.html#setAutoConfig-java.lang.Class-java.lang.String-">setAutoConfig</a>, <a href="../../../../org/apache/felix/dm/Component.html#setCallbacks-java.lang.Object-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">setCallbacks</a>, <a href="../../../../org/apache/felix/dm/Component.html#setCallbacks-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">setCallbacks</a>, <a href="../../../../org/apache/felix/dm/Component.html#setComposition-java.lang.Object-java.lang.String-">setComposition</a>, <a href="../../../../org/apache/felix/dm/Component.html#setComposition-java.lang.String-">setComposition</a>, <a href="../../../../org/apache/felix/dm/Component.html#setDebug-java.lang.String-">setDebug</a>, <a href="../../../../org/apache/felix/dm/Component.html#setFactory-java.lang.Object-java.lang.String-">setFactory</a>, <a href="../../../../org/apache/felix/dm/Component.html#setFactory-java.lang.String-">setFactory</a>, <a href="../../../../org/apache/felix/dm/Component.html#setImplementation-java.lang.Object-">setImplementation</a>, <a href="../../../../org/apache/felix/dm/Component.html#setInterface-java.lang.Class:A-java.util.Dictionary-">setInterface</a>, <a href="../../../../org/apache/felix/dm/Component.html#setInterface-java.lang.Class-java.util.Dictionary-">setInterface</a>, <a href="../../../../org/apache/felix/dm/Component.html#setInterface-java.lang.String:A-java.util.Dictionary-">setInterface</a>, <a href="../../../../org/apache/felix/dm/Component.html#setInterface-java.lang.String-java.util.Dictionary-">setInterface</a>, <a href="../../../../org/apache/felix/dm/Component.html#setScope-org.apache.felix.dm.Component.ServiceScope-">setScope</a>, <a href="../../../../org/apache/felix/dm/Component.html#setServiceProperties-java.util.Dictionary-">setServiceProperties</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.felix.dm.AbstractComponent">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;org.apache.felix.dm.<a href="../../../../org/apache/felix/dm/AbstractComponent.html" title="interface in org.apache.felix.dm">AbstractComponent</a></h3>
<code><a href="../../../../org/apache/felix/dm/AbstractComponent.html#getComponentDeclaration--">getComponentDeclaration</a>, <a href="../../../../org/apache/felix/dm/AbstractComponent.html#getDependencyManager--">getDependencyManager</a>, <a href="../../../../org/apache/felix/dm/AbstractComponent.html#getInstance--">getInstance</a>, <a href="../../../../org/apache/felix/dm/AbstractComponent.html#getInstances--">getInstances</a>, <a href="../../../../org/apache/felix/dm/AbstractComponent.html#getServiceProperties--">getServiceProperties</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="setAspect-java.lang.Class-java.lang.String-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setAspect</h4>
<pre><a href="../../../../org/apache/felix/dm/AspectComponent.html" title="interface in org.apache.felix.dm">AspectComponent</a>&nbsp;setAspect(java.lang.Class&lt;?&gt;&nbsp;service,
java.lang.String&nbsp;filter,
int&nbsp;ranking)</pre>
<div class="block">Sets the service interface to apply the aspect to (required parameter)</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>service</code> - the service interface to apply the aspect to</dd>
<dd><code>filter</code> - the filter condition to use with the service aspect interface (null if no filter)</dd>
<dd><code>ranking</code> - the level used to organize the aspect chain ordering</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>this aspect parameter instance</dd>
</dl>
</li>
</ul>
<a name="setAspectField-java.lang.String-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setAspectField</h4>
<pre><a href="../../../../org/apache/felix/dm/AspectComponent.html" title="interface in org.apache.felix.dm">AspectComponent</a>&nbsp;setAspectField(java.lang.String&nbsp;autoConfig)</pre>
<div class="block">Sets the aspect implementation field name where to inject original service (optional parameter).
If not set or null, any field matching the original service will be injected.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>autoConfig</code> - the aspect implementation field name where to inject original service</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>this aspect parameter instance</dd>
</dl>
</li>
</ul>
<a name="setAspectCallbacks-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setAspectCallbacks</h4>
<pre><a href="../../../../org/apache/felix/dm/AspectComponent.html" title="interface in org.apache.felix.dm">AspectComponent</a>&nbsp;setAspectCallbacks(java.lang.String&nbsp;add,
java.lang.String&nbsp;change,
java.lang.String&nbsp;remove,
java.lang.String&nbsp;swap)</pre>
<div class="block">Sets name of the callbacks method to invoke on add,change,remove, or swap callbacks (optional parameter).</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>add</code> - name of the callback method to invoke on add</dd>
<dd><code>change</code> - name of the callback method to invoke on change</dd>
<dd><code>remove</code> - name of the callback method to invoke on remove</dd>
<dd><code>swap</code> - name of the callback method to invoke on swap</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>this aspect parameter instance</dd>
</dl>
</li>
</ul>
<a name="setAspectCallbackInstance-java.lang.Object-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>setAspectCallbackInstance</h4>
<pre><a href="../../../../org/apache/felix/dm/AspectComponent.html" title="interface in org.apache.felix.dm">AspectComponent</a>&nbsp;setAspectCallbackInstance(java.lang.Object&nbsp;callbackInstance)</pre>
<div class="block">Sets the instance to invoke the callbacks on (optional parameter).
null means the callbacks will be invoked on the aspect implementation object.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>callbackInstance</code> - the instance to invoke the callbacks on</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>this aspect parameter instance</dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/apache/felix/dm/AdapterComponent.html" title="interface in org.apache.felix.dm"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../org/apache/felix/dm/BundleComponent.html" title="interface in org.apache.felix.dm"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/felix/dm/AspectComponent.html" target="_top">Frames</a></li>
<li><a href="AspectComponent.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>