1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Spring]ObjectProvider<T>をコンストラクタインジェクションする

Last updated at Posted at 2022-08-13

ObjectProvider

ObjectFactory<T>の拡張バリアントで、ObjectProvider<T>を宣言することで、
getIfAvailablegetIfUniqueを含むいくつかの追加のアクセスバリアントを提供できる。

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される危険性を除外できる。

cf. Spring Framework コアテクノロジー - リファレンス

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?