在Spring中引用singleton bean

时间:2012-05-24 10:52:18

标签: java spring java-ee web-applications application-singleton

我是Spring的新手,如果问题似乎微不足道,请提前道歉。

当我在spring中声明一个bean时,它默认是单例。当spring从config.xml初始化bean时,它使用默认创建者。如果我为类声明我的私有创建者和getInstance方法,我不会引用在Spring初始化期间创建的bean - 我只是再次创建相同的类,并且在以后随时调用getInstance()时会引用此类。

我的问题是如何从代码中引用初始化期间创建的单例(对config.xml中定义的bean)。

4 个答案:

答案 0 :(得分:2)

如果您的代码中有工厂方法,那么使xml配置调用该工厂方法而不是构造函数。不要从Java代码中调用getInstance

<bean id="fromFactory" class="org.example.MyFactory" factory-method="getInstance" />

答案 1 :(得分:2)

Spring默认会创建一个类的单个实例。它将调用类的构造函数一次。我认为你把这与

混淆了
public static void getInstance() 

Java中的单身人士的习惯用法,试图在你的班级中强制执行你永远不会有多个实例。

Spring构建了一个类的单个实例,并将其存储在Spring容器中,供您使用。要获得对Spring创建的实例的引用,您需要从Spring的应用程序上下文中检索它。

答案 2 :(得分:1)

我认为这可能与您的问题有关: Why is Spring's ApplicationContext.getBean considered bad?

有很多方法:你可以从ApplicationContext获取你的bean实例,你可以@Autowire它等等。

答案 3 :(得分:0)

如果你的类实现了Singleton Pattern,那么getInstance()将无法返回除Spring之外的实例。

  

如何引用初始化期间创建的单例

基本上,你应该把它injected带到另一个你需要它的班级。 你也可以通过ApplicationContext.getBean(), although it is not that elegant来引用它。