声明性服务默认是单例吗?

时间:2015-10-22 16:24:05

标签: osgi equinox 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>

班级:

public class PrinterManager implements IPrinterManager {

    public void activate(BundleContext ctx) {
        System.err.println("hello");
    }

    public void deactivate(BundleContext ctx) {
        System.err.println("bye");
    }
}

当我在我的代码中的其他地方注入该类的对象时:

@Inject
IPrinterManager pm;

我是否总能获得该课程的相同实例? 如果它不是单例,如何在osgi / equinox工具的帮助下使该实例成为单例? (我知道如何用java / vanilla的方式编写单例,这不是我的问题)

1 个答案:

答案 0 :(得分:2)

是的,DS组件默认为单例。见Multiple Component Instances with OSGi Declarative Services