0

次のような工場を持てますか?

public class Factory
{
    private static Map<EnumXyz, IDAO> map = new HashMap<Sting, Object>();


    public static void init()
    {
        //how do i initialize my map through spring initialization
    }

    public static IDAO getDAO(EnumXyz dao)
    {
        if (map.containsKey(dao))
        return map.get(dao);
        else
        {
            throw new IllegalArgumentException("dao not supported " + dao);
        }

        return null;
    }

}
  1. 春までの工場の初期化はどのように処理しますか?
  2. 工場を建てるこの方法は正しいですか?
  3. 他のより良いアプローチはありますか?
4

2 に答える 2

2
  1. 特にinit()メソッドではなく、すべてを静的にしないでください。
  2. Beanに注釈を付けます@Component
  3. init()メソッドに。でアノテーションを付けます@PostConstruct

これで、init()SpringがFactoryクラスを構築するときにメソッドが呼び出され、それ自体を初期化するためのフックが提供されます。

于 2012-08-13T14:13:28.023 に答える
0

私はあなたのファクトリをBean自体としてインスタンス化し、そのインスタンスを作成します。すべてを静的にしないでください。Spring自体が、Beanがシングルトンであるかどうかを制御できます(デフォルトではそのようになります)。

例えば

public class Factory {
   public Factory(final Map<String,Object} map) {
      this.map = map;
   }
}

およびSpring構成:

<bean id="myFactory" class="Factory">
   <constructor-arg>
      <util:map>
        <!-- configure your map here, or reference it as a separate bean -->
        <entry key="java.lang.String" value="key">....</entry>
      </util:map>
   </constructor-arg>
</bean>

コンストラクターで、Spring構成で定義されているマップを渡します。

于 2012-08-13T14:11:58.703 に答える