2016-07-24 6 views
0

私は、豆が遅い地図の中で怠惰に初期化して、豆がmap.getで取得されたときにのみ初期化されるようにしています。Spring Mapで怠惰に初期化する豆

春の設定

<bean class="java.util.HashMap"> 
    <constructor-arg> 
    <map> 
     <entry key="foo"> 
     <bean class="Messager" lazy-init="true"> 
      <constructor-arg index="0" value="bar" /> 
     </bean> 
     </entry> 
    </map> 
    </constructor-arg> 
</bean> 

Testクラス

public class Messager { 
    public Messager(String message) { 
     System.out.println(String.format("Initialized %s", message)); 
    } 
} 

あなたは上記のコードを実行すると、マップ内のメサジェBeanが適用時に初期化され、次のコードを考えてみましょう起動。マップエントリが取得されるまでBeanの初期化を延期するにはどうすればよいですか?

答えて

0

lazy-trueは、単に他の豆(または、この場合に起こるように内部スプリング・インフラストラクチャ・コード)からこの春豆の最初の基準までの初期化を延期します。 ここでは、外側のマップの初期化を延期することができますが、一度初期化するとコンストラクタ経由で渡されたマップは完全に初期化されます。 map要素の機能は、SpringのMapFactoryBeanでサポートされています。マップ内の値を一度に初期化するので、あなたが望む機能をサポートしているようには見えません。だから、 私の知る限り、春には、箱から出して、このサポートを持っていない - あなたは怠惰なマップの独自のimplmentationを試したりcommons-collectionLazyMapを使用することができますが。 また、Springコンテキストでこのクラスを使用できるようにするために、FactoryBeanを記述する必要があります。

関連する問題