3

私は春のフレームワークが初めてです。特定のオブジェクトを作成するときに、そのデータ メンバーを初期化する必要があるという強制が必要でした。最善の方法は、コンストラクターで初期化することです。

@Service
class GenerationServiceFactory{

@Autowired
private MyModel model;

public GenerationServiceFactory(MyModel obj){
model = obj;
}

}

ただし、実際のモデル オブジェクトは実行時に作成されます。次に、春がすべてのBeanを作成するときに、そのオブジェクトを渡すにはどうすればよいですか。私はそれが遅延初期化に関連していることを知っています。しかし、私はそれがどのように機能するのかわかりません。私を助けてください..ありがとう:)

4

3 に答える 3

3

遅延初期化を使用する場合、Spring はオンデマンドでオブジェクトを作成します。したがって、クラス A がクラス B に依存している場合、クラス A が要求されるまでクラス B はインスタンス化されません。Spring は依存関係のツリーをナビゲートし、必要に応じてインスタンス化します

于 2013-10-23T12:29:11.503 に答える
2

Bean がシングルトン Bean から参照されている場合lazy-initは、シングルトン Bean の依存関係グラフの一部として作成されます。次のような動的プロキシを使用して、これを回避できます。

 <bean id="first" class="package.TestBean1">
     <property name="field" ref="second"/>
 </bean>

 <bean id="second" class="org.springframework.aop.framework.ProxyFactoryBean">
     <property name="targetSource">
          <bean class="org.springframework.aop.target.LazyInitTargetSource">
              <property name="targetBeanName" value="rawSecond"/>
          </bean>
     </property>
  </bean>

  <bean id="rawSecond" class="package.TestBean2" lazy-init="true">

rawSecondこの構成は、最初のメソッド呼び出しが行われるまでインスタンス化を遅らせます。

于 2013-10-23T12:31:20.490 に答える
0

通常、Spring フレームワークでは、Spring コンテナーが XML 構成ファイルをロードすると、すべての Bean が一度に開始されます。アプリケーションで、XML がコンテナーにロードされるとすぐに一部の Bean を初期化したくない、つまり実行時にロードする必要がある状況が発生したとします。その場合、属性 lazy-init を指定できます。 ="真"。

ここでサンプルの例を確認できます

于 2017-11-24T15:25:40.147 に答える