有没有办法在捆绑软件的类代码中访问@Component声明的服务属性?

时间:2018-08-23 11:52:32

标签: java osgi

我有一个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
}

}

2 个答案:

答案 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");
  }
}