ObjectProvider
ObjectFactory<T>
の拡張バリアントで、ObjectProvider<T>
を宣言することで、
getIfAvailable
やgetIfUnique
を含むいくつかの追加のアクセスバリアントを提供できる。
cf. :
ObjectProvider (Spring Framework API) - Javadoc
Using Spring's ObjectProvider
ObjectFactory
ObjectFactory<T>
として宣言することで、getObject()
呼び出しが必要になるたびに、
インスタンスを保持したり個別に格納したりすることなく、現在のインスタンスをオンデマンドに取得できるようになる。
cf. ObjectFactory (Spring Framework API) - Javadoc
ObjectProviderをコンストラクタインジェクションする
1クラス内で、大量のクラスをコンストラクタインジェクションするとコストが高いことがある。
必要なときにContextLoader.getCurrentWebApplicationContext().getBean(beanName)
を呼び出すと、クラスの生成が遅延されるため、
コンポーネント生成の責務をになうObjectProvider<T>
をコンストラクタインジェクションしておき、必要なときにクラスを生成するようにする。
また、ObjectProvider<T>
を経由してコンポーネントを取得することで、SingletonにDIされるべきでないコンポーネント(e.g. Requestスコープ)がDIされる危険性を除外できる。