我阅读了尼尔·巴特利特(Neil Bartlett)的this answer,他说DS可以代替旧的ManagedServiceFactory
实例化服务的方法:
通过添加“ configurationPolicy:require”,组件可以用作单例(即MS)或工厂(即MSF)。如果您使用与component.name相同的Factory PID创建一个工厂配置,那么您将获得一个工厂。
据我所知,使用工厂PID创建新配置会使Configuration Admin创建此服务的新实例;的确是这样。
假设我的工厂PID为test
,然后我用test-1
添加了felix-fileinstall
的配置。然后,当我添加相应的配置时,将正确实例化并激活此服务。
如果我愿意
@Reference(target="(service.pid=test-1)")
Test test;
作为创建的配置is required to have a generated GUID,这显然无法解决。
如何获得对此服务的引用?我是否需要向每个配置实例添加其他属性以进行过滤?
答案 0 :(得分:1)
您为什么需要获得对此特定服务实例的引用?
通常,服务使用者应该避免对服务背后的实现了解太多,并且可以肯定地将导致实例化组件的PID视为实现的内部细节。
获得服务时,您主要关心服务的功能-这是服务接口。然后,您可能还需要关心服务的补充属性。
例如,如果我的管道破裂了,那么我需要水管工,所以我寻找一种Plumber
类型的服务。如果是凌晨2点,我住在伦敦,那么我需要24小时的水管工,所以我添加了一个过滤器:(&(available=24hr)(location=London))
。我可能还使用(yelp_rating>=4.0)
来完善过滤条件。但是我不在乎那个水管工的名字或他晚餐吃什么。