gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:55:06 24 4
gpt4 key购买 nike

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

示例

服务.java

public interface Service {
public void do();
}

Provider1.java

public class Provider1 implements Service {    
@Override
public void do(){
//a way
}
}

Provider2.java

public class Provider2 implements Service {    
@Override
public void do(){
//another way
}
}

消费者.java

public class Consumer {
private Service myService;

protected void bindService(Service s){ // Actually it's Provider1
myService = s;
}

protected void unbindService(Service s){
myService = null;
}

public void useThisKindOfService(String s){
// Do something crazy
}
}

所以,我希望找到一种方法来重新配置消费者以释放 Provider1 并请求 Provider2,而不是“做一些疯狂的事情”。

这可能吗?

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

OSGI/Felix Declarative services: How to filter the services to be bound

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

最佳答案

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

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

如果您的组件的引用策略是动态的,则新的引用将被绑定(bind),而无需重新激活您的组件。

有关详细信息,请参阅 OSGi Compendium 规范的声明性服务章节。

关于java - OSGI 中声明性服务的动态目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32785821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com