您已经在OSGi中实现了经典的反模式:您假设在捆绑包启动时EventAdmin服务将已经可用。这本质上是不安全的假设,因为您的捆绑包实际上可能在提供EventAdmin服务的捆绑包之前启动。
有一个错误的方法和正确的方法来解决此问题。错误的方法是坚持认为必须在EventAdmin之后启动捆绑软件。这样会导致开始顺序依赖性和极端的脆弱性。请参阅:http
:
//wiki.osgi.org/wiki/Avoid_Start_Order_Dependencies
正确的方法是使用诸如声明式服务(DS)之类的框架在捆绑包中声明一个引用EventAdmin服务的组件。然后,DS将激活您的组件,并在EventAdmin实例可用时将其注入。请参阅:http://wiki.osgi.org/wiki/Declarative_Services



