java是否可以通过编程方式创建OSGI服务,并解决注入问题
不幸的是,我找不到一种方法以编程方式使用解析的引用创建osgi服务。众所周知,OSGi将服务创建为单例对象。由于某些原因,我需要手动创建新的服务实例
本案:
@Service(ICasualService.class)
@Component(immediate = true, label = "Casual Service")
public class CasualService implements ICasualService {
@Reference
private ConfigurationAdmin configurationAdmin;
}
使用捆绑上下文,我可以注册我的服务:
private BundleContext bundleContext;
ICasualService casualService = new CasualService();
Dictionary props = new Properties();
bundleContext.registerService(ICasualService.class.getName(), casualService, props);
但是,这种方式configurationAdmin在新创建的服务中为空
问题是是否可以通过编程方式创建服务的新实例
多谢各位
更新:解决方案应该适用于Felix(OSGi实现)
# 1 楼答案
您可以使用ComponentFactory创建组件的实例。见this article at Vogella
在要以编程方式创建的组件上使用此选项:
然后在另一个组件中,您可以获得组件工厂:
并从中创建一个实例: