我有一个osgi服务组件,其属性在@Component装饰器上设置(特别是事件主题)。有没有办法访问代码中的事件主题值?甚至更好的是,是否有一种方法可以动态控制我需要将此服务捆绑包注册为侦听器的哪些事件主题?
@Component( immediate=true, service = {EventHandler.class},
property = {"event.topics=PRICES/STOCKS/NASDAQ/SH"})
public class OrderEntry implements EventHandler{
@Activate
protected void activate(){
// TODO:
// access event.topics property values
}
}
答案 0 :(得分:0)
您可以通过ComponentContext
方法获得activate()
。 ComponentContext
通过getProperties()
方法提供对属性的访问。不幸的是,这是一本字典...
@Component( immediate=true, service = {EventHandler.class},
property = {"event.topics=PRICES/STOCKS/NASDAQ/SH"})
public class OrderEntry implements EventHandler{
@Activate protected void activate(ComponentContext context){
System.out.println("Props " + context.getProperties());
}
}
答案 1 :(得分:0)
您可以将Map
传递到Activate方法以接收组件属性。
@Component(immediate=true, property = {"event.topics=PRICES/STOCKS/NASDAQ/SH"})
public class OrderEntry implements EventHandler {
@Activate
void activate(Map<String,Object> properties){
Object eventTopics = properties.get("event.topics");
}
}