public interface Plugin {
void doSomething();
}
@Component
public class PluginImpl implements Plugin {
@Override
public void doSomething() {
}
}
@Component
public class PluginManager {
@Reference
private Plugin plugin;
public void executePlugin() {
plugin.doSomething();
}
}
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.3.0" name="PluginManager">
<implementation class="com.example.PluginManager"/>
<reference interface="com.example.Plugin" bind="setPlugin" unbind="unsetPlugin"/>
</scr:component>
public interface Service {
void sendMessage(String message);
}
@Component
public class ServiceImpl implements Service {
@Override
public void sendMessage(String message) {
}
}
@Component
@Service
public class ServiceConsumer {
@Reference
private Service service;
public void sendServiceMessage(String message) {
service.sendMessage(message);
}
}
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.3.0" name="ServiceConsumer">
<implementation class="com.example.ServiceConsumer"/>
<service>
<provide interface="com.example.Service"/>
</service>
<reference interface="com.example.Service" bind="setService" unbind="unsetService"/>
</scr:component>