gpt4 book ai didi

spring - 将依赖项注入(inject)到您的单例中

转载 作者:行者123 更新时间:2023-12-02 09:52:58 26 4
gpt4 key购买 nike

我有一个单例,它有一个 Spring 注入(inject)的 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);
}
}

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

 <bean id="service" class="MyService" factory-method="getInstance"/>

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

是否有一种编程方式可以将 MyDao 依赖注入(inject)到 MyService 中,但不让 spring 管理 MyService?

基本上我希望能够从我的代码中做到这一点:

MyService.getInstance().doSomething();

同时让 spring 为我注入(inject) MyDao。

最佳答案

这是一个解决方案,创建一个带有静态工厂方法的类:

public class MyService {
private static MyService instance;

private MyDao myDao;

public static MyService createInstance(final MyDao myDao) {
instance = new MyService(myDao);
return instance;
}

private MyService(final MyDao myDao) {
this.myDao = myDao;
}

public static synchronized MyService getInstance() {
return instance;
}

public void doSomething() {
// just do it!
myDao.justDoIt();
}
}

并使用spring来初始化它:

  <bean class="my.path.MyService" factory-method="createInstance" scope="singleton">
<constructor-arg ref="reference.to.myDao" />
</bean>

现在你应该能够做到:

MyService.getInstance().doSomething();

没有任何问题。

关于spring - 将依赖项注入(inject)到您的单例中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2860750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com