0

I'm new to Spring and thus apologies in advance if the questions seems to be trivial.

When I declare a bean in spring it is singleton by default. When spring initializes beans from config.xml it's using default creator. If I declare my private creator and getInstance method for a class, I don't get reference to the bean created during Spring initialization - I simply create same class again and this class is referenced when getInstance() is called any time later.

My question is how can I get reference to the singleton created during initialization (to the bean defined in config.xml) from code.

4

4 に答える 4

2

コードにファクトリメソッドがある場合は、xml構成で、コンストラクターではなくそのファクトリメソッドを呼び出すようにします。getInstanceJavaコードから呼び出さないでください。

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

Springは、デフォルトでクラスの単一インスタンスを作成します。クラスのコンストラクターを1回呼び出します。私はあなたがこれをと混同していると思います

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

クラスがシングルトンパターンgetInstance()を実装している場合、Springが作成したもの以外のインスタンスを返す方法はありません。

初期化中に作成されたシングルトンへの参照を取得するにはどうすればよいですか

基本的に、それを必要とする他のクラスに注入する必要があります。ApplicationContext.getBean()また、それほどエレガントではありませんが、で参照することもできます。

于 2012-05-24T11:02:30.297 に答える