最近、Foo Bean と Bar Bean があるこの要件に出くわしました。両方ともシングルトンであり、Bar を Foo に注入する必要があります。
ただし、Bar はリソース/メモリの重い Bean であるため、Foo が実際にメソッドを呼び出すポイントまでインスタンス化を遅らせる必要があります。問題は、Foo を熱心にインスタンス化する必要があることです。では、それを行うさまざまな方法は何ですか?
以下の回答で解決策を共有しました。他のアプローチについて学ぶことは素晴らしいことです。
最近、Foo Bean と Bar Bean があるこの要件に出くわしました。両方ともシングルトンであり、Bar を Foo に注入する必要があります。
ただし、Bar はリソース/メモリの重い Bean であるため、Foo が実際にメソッドを呼び出すポイントまでインスタンス化を遅らせる必要があります。問題は、Foo を熱心にインスタンス化する必要があることです。では、それを行うさまざまな方法は何ですか?
以下の回答で解決策を共有しました。他のアプローチについて学ぶことは素晴らしいことです。
本質的に、これは私がしたことです:
1)Bar遅延インスタンス化を行います。
2) a を使用しLazyInitTargetSourceて、上記の Bean をポイントします。
3) 上記のターゲット ソースを指す「ProxyFactoryBean」を使用します。
4)Foo積極的にインスタンス化して、上記のプロキシを挿入します。
このソリューションは、ソリューションを使用するよりも冗長で複雑ですlookup-method。ただしlookup-method、ソリューションは単体テストが難しく、他のソリューションに比べて Spring との結合が強いと感じています。
構成は次のとおりです。
<bean id="barTarget" class="bar.Bar" lazy-init="true">
<constructor-arg value="423" />
</bean>
<bean id="singletonTargetSource" class="org.springframework.aop.target.LazyInitTargetSource">
<property name="targetBeanName" value="barTarget" />
</bean>
<bean id="bar" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="targetSource" ref="singletonTargetSource" />
</bean>
<bean id="foo" class="foo.Foo">
<property name="bar" ref="bar" />
</bean>