どちらのスコープもあなたに合わないように見えるのでsingleton
(prototype
単一のオブジェクトは必要ありませんが、毎回新しいインスタンスは必要ありません)、別のスコープが必要です。
Web アプリケーションのコンテキストには、request
スコープを使用するというすぐに使える解決策があります。したがって、どこに何回注入しても、すべての要求/応答サイクルで Bean のインスタンスは 1 つだけになります。
非 Web アプリケーションのコンテキストでは、独自の実装を定義できます。org.springframework.beans.factory.config.Scope
更新:あなたが明確にした後、これは非常に奇妙なケースのようです. 私の頭に浮かぶのは次のことです。
FactoryBean
2 つの s (実際には - のサブクラス) を定義します。1 つはAbstractFactoryBean
毎回新しいオブジェクトを返し、もう 1 つは同じオブジェクトを返します (両方ともsingleton
スコープ内にある必要があります) 。
Foo
s を@Resource(name="prototypeFactoryBean")
andで注入します@Resource(name="singletonFactoryBean")
(の代わりに@Autowired
)
- シングルトンを返すように
singletonFactoryBean
設計できます(ファクトリBeanクラスに注入されます)
- は
prototypeFactoryBean
新しいインスタンスを作成し、BeanFactory
(から利用可能getBeanFactory()
) をにキャストしてAutowireCapableBeanFactory
を呼び出し.autowire(newlyCreatedBean)
、それを返すことができます。(または、 を注入しApplicationContext
てその を取得することもできますAutowireCapableBeanFactory
)
しかし、これは非常に複雑であり、私の説明の後でも、拡張された春の知識が必要になります:)
さらに、上記の「癖」を作るのではなく、デザインを再考する必要があると思います
更新 2:コメントの後、命名の概念は注釈に転送されます - 上記で示したように、使用できます@Resource(name="someBean")