依赖注入你的单身人士

Lan*_*ali 6 singleton spring dependency-injection

我有一个弹簧注入Dao的单例(简化如下):

public class MyService<T> implements Service<T> {
    private final Map<String, T> objects;
    private static MyService instance;

    MyDao myDao;

    public void set MyDao(MyDao myDao) {
        this. myDao = myDao;
    }

    private MyService() {
        this.objects = Collections.synchronizedMap(new HashMap<String, T>());
        // start a background thread that runs for ever
    }

    public static synchronized MyService getInstance() {
        if(instance == null) {
            instance = new MyService();
        }
        return instance;
    }

    public void doSomething() {
        myDao.persist(objects);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的spring配置可能如下所示:

 <bean id="service" class="MyService" factory-method="getInstance"/>
Run Code Online (Sandbox Code Playgroud)

但这将在启动期间实例化MyService.

是否有一种编程方式将MyDao依赖注入MyService,但没有spring管理MyService?

基本上我希望能够从我的代码中执行此操作:

MyService.getInstance().doSomething();
Run Code Online (Sandbox Code Playgroud)

春天为我注入了MyDao.

Bri*_*new 2

如果你想要一个单例,为什么不在 Spring 配置中定义一个类,它会自动成为一个单例(默认情况下)。

为了避免在启动时初始化,您是否看过 Spring延迟初始化?基本上你需要:

lazy-init="true"
Run Code Online (Sandbox Code Playgroud)

在你的bean定义中。