public class MyService implements IService {
public void doSomething() {
System.out.println("Doing something...");
}
}
public class MyClient {
private ServiceLookup lookup;
public void setServiceLookup(ServiceLookup lookup) {
this.lookup = lookup;
}
public void doSomethingWithService() {
IService service = lookup.getService(IService.class);
service.doSomething();
}
}
public class MyComponent {
private MyService service;
public void activate() {
service = new MyService();
registerService(IService.class, service);
}
public void deactivate() {
unregisterService(IService.class, service);
}
}
<scr:component name="MyComponent" immediate="true">
<implementation class="com.example.MyComponent"/>
<service>
<provide interface="com.example.IService"/>
</service>
</scr:component>
<reference bind="setServiceLookup" interface="com.example.ServiceLookup" cardinality="1..1" policy="static"/>
<scr:component name="ServiceRepository" immediate="true">
<implementation class="com.example.ServiceRepository"/>
<reference bind="addService" unbind="removeService" interface="com.example.IService" cardinality="0..n" policy="dynamic"/>
</scr:component>