0

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

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

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

4

4 回答 4

2

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

<bean id="fromFactory" class="org.example.MyFactory" factory-method="getInstance" />
于 2012-05-24T11:02:00.140 回答
2

默认情况下,Spring 将创建您的类的单个实例。它将调用该类的构造函数一次。我认为您已将其与

public static void getInstance() 

Java 中单例的成语,这是一种尝试在你的类中强制你永远不能拥有多个实例。

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

于 2012-05-24T11:02:27.160 回答
1

我认为这可能与您的问题有关: 为什么 Spring 的 ApplicationContext.getBean 被认为不好?

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

于 2012-05-24T11:02:08.267 回答
0

如果你的类实现了单例模式,那么除了 Spring 创建的之外,没有办法getInstance()返回一个实例。

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

基本上,您应该将它注入到其他需要它的类中。你也可以参考它ApplicationContext.getBean(),虽然它不是那么优雅

于 2012-05-24T11:02:30.297 回答