Java OSGI中声明性服务的动态目标

Java OSGI中声明性服务的动态目标,java,dynamic,osgi,declarative-services,Java,Dynamic,Osgi,Declarative Services,给定使用服务的使用者,该使用者如何使用声明性服务动态选择特定的提供者 例子 Service.java 公共接口服务{ 公开无效do(); } Provider1.java 公共类Provider1实现服务{ @凌驾 公营部门{ //一条路 } } Provider2.java 公共类Provider2实现服务{ @凌驾 公营部门{ //另一种方式 } } Consumer.java 公共类消费者{ 私人服务myService; 受保护的void bindService(服务){

给定使用服务的使用者,该使用者如何使用声明性服务动态选择特定的提供者

例子 Service.java

公共接口服务{
公开无效do();
}
Provider1.java

公共类Provider1实现服务{
@凌驾
公营部门{
//一条路
}   
}
Provider2.java

公共类Provider2实现服务{
@凌驾
公营部门{
//另一种方式
}   
}
Consumer.java

公共类消费者{
私人服务myService;
受保护的void bindService(服务){//实际上它是Provider1
myService=s;
}
受保护的无效解除绑定服务(服务s){
myService=null;
}
public void使用此类服务(字符串s){
//做些疯狂的事
}
}
因此,我希望它不是“做一些疯狂的事情”,而是找到一种方法来重新配置消费者,以便发布Provider1并请求Provider2

可能吗

与“重复问题”相关的更新


在我的上下文中,我不能使用声明性目标,因为目标的值必须在构建时知道,在我的情况下,目标可以由用户在运行时定义

声明性服务的组件可以通过ConfigurationAdmin进行配置。通过这样做,可以在运行时更改组件的配置

您还可以在运行时通过ConfigurationAdmin更改myService.target的配置。如果这样做,另一个引用将绑定到组件

如果组件引用的策略是动态的,则新引用将被绑定,而不会重新激活组件

有关更多信息,请参阅OSGi概要规范的声明性服务一章