将服务注册为OSGi容器中的正常服务与ServiceFactory有什么区别?

Raj*_*ula 1 osgi apache-felix

将服务注册为普通服务与将其作为ServiceFactory之间的区别是什么?

例如 :

我有一个正常的osgi组件,我正在使用服务scr注释进行服务

@Component 
@Service 
class Service1 implements Service1Interface { 
...
... 
... 
}
Run Code Online (Sandbox Code Playgroud)

现在,我有另一个osgi组件,我将作为服务注册ServiceFactory标志为true

@Component 
@Service(serviceFactory=true )
class Service1 implements Service1Interface { 
...
... 
... 
}
Run Code Online (Sandbox Code Playgroud)

这两者究竟有什么区别?它们在容器中注册时是否存在差异?在什么情况下我们应该选择ServiceFactory?

BJ *_*ave 5

在前者中,将有一个组件实例将用于获取服务的所有bundle.在后一种情况下,将为获取服务的每个包创建组件的新实例.

如果需要在每个使用捆绑包的基础上跟踪资源,则服务工厂非常有用.