我需要的是每次当某个消费者需要此服务+使用 CDI 时获取新的服务实例。我读了很多文章,但找不到两个问题的答案。
如果我们使用工厂,为什么在服务使用者中我们调用工厂( http://www.rpgnextgen.com/wiki/doku.php?id=component_factory ),然后我们获得对服务的引用。我的意思是
// get factory ComponentFactory factory = (ComponentFactory) context.getService(serviceReferences[0]); // get instance ComponentInstance instance = factory.newInstance(null);
有没有办法在osgi内部调用工厂时,用特定的接口(interface)设置工厂并在服务消费者中调用服务?
- 如果在服务消费者中我们调用工厂,那么为什么当事实上的工厂是组件时我们将服务标记为组件?
问题是,如果没有工厂,我可以使用 @Inject @OsgiService (javase) 或 @OSGiService (javaee)
并且我可以使用不同的过滤器,并且代码非常清晰。使用组件工厂我(据我所知)失去了这种能力。
最佳答案
ComponentFactory
是为想要使用工厂的消费者而存在的,因为他们想要控制各个组件的生命周期。例如,如果他们想要为每个 Web 请求创建组件的实例。
如果您不想使用 ComponentFactory
...那就不要使用。
关于java - OSGI:DS 和组件工厂问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31354996/