声明式服务默认是单例吗?
Is a declarative service a singleton by default?
配置:
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" enabled="true" immediate="true" name="printing">
<implementation class="printing.PrinterManager"/>
<service>
<provide interface="service.printing.IPrinterManager"/>
</service>
</scr:component>
class:
public class PrinterManager implements IPrinterManager {
public void activate(BundleContext ctx) {
System.err.println("hello");
}
public void deactivate(BundleContext ctx) {
System.err.println("bye");
}
}
当我像这样在我的代码中的其他地方注入那个 class 的对象时:
@Inject
IPrinterManager pm;
我是否总是得到 class 的相同实例?
如果该实例还不是单例,如何在 osgi/equinox 设施的帮助下使其成为单例? (我知道如何以 java/vanilla 方式编写单例,这不是我的问题)
是的,默认情况下,DS 组件是单例。参见 Multiple Component Instances with OSGi Declarative Services
配置:
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" enabled="true" immediate="true" name="printing">
<implementation class="printing.PrinterManager"/>
<service>
<provide interface="service.printing.IPrinterManager"/>
</service>
</scr:component>
class:
public class PrinterManager implements IPrinterManager {
public void activate(BundleContext ctx) {
System.err.println("hello");
}
public void deactivate(BundleContext ctx) {
System.err.println("bye");
}
}
当我像这样在我的代码中的其他地方注入那个 class 的对象时:
@Inject
IPrinterManager pm;
我是否总是得到 class 的相同实例? 如果该实例还不是单例,如何在 osgi/equinox 设施的帮助下使其成为单例? (我知道如何以 java/vanilla 方式编写单例,这不是我的问题)
是的,默认情况下,DS 组件是单例。参见 Multiple Component Instances with OSGi Declarative Services