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

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