我有OSGi模块化系统,其中我有以下组件:
它们被打包成OSGi包,如下所示:
`-ConnectionManager
`-ConnectionManager.class
`-IrcProtocol
`-IrcProtocolManagerService.class
`-IrcProtocolInstance.class
`-XMPPProtocol
`-XMPPProtocolManagerService.class
`-XMPPProtocolInstance.class
ConnectionManager
注明
@Provides
@Instantiate
@Component
并实现Subscriber
接口,使其具有发送和侦听某些类型Event Admin
传递的消息的能力。
每个*ProtocolManager
都注明了
@Provides
@Instantiate
@Component
实现ProtocolManager
接口,使ConnectionManager
服务监听器能够发现它。
每个*ProtocolInstance
都受到
@Provides
@Component
并实现Subscriber
接口。它还实现了ProtocolInstance
接口,它提供了connect()
和disconnect()
等通用连接操作。
这里的问题是ProtocolInstance
是手工创建的,new
运算符在ProtocolManager
内,而不是@Instantiate
注释触发器,因此 - 尽管它是@Provides
注释,但不参与iPOJO服务发布。
问题:如何正确地(并且最好以声明方式,带注释)发布这种以编程方式创建的ProtocolListener
服务,而无需手动潜入原始OSGi服务出版物(至少在某种工厂之外,可能)?或者,可能,如何重新构建我的系统,以便更好地与未说出的iPOJO指南一起玩?
答案 0 :(得分:1)
iPOJO不支持使用'new'创建对象。实际上,iPOJO实例不仅是这个对象,而且是包装它的容器。
但是,您有两种解决方案: