1

Springを介してクラスを条件付きで初期化する方法は?いくつかの条件が真の場合、1つの引数を渡し、それ以外の場合は他の引数を渡します

<bean id="myFactory" class="Factory">

  if something then
   <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>
  else
    <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>

どのように?

4

2 に答える 2

1

Spring Expression Language がうまくいくかもしれません。リンク

于 2012-08-23T14:23:30.340 に答える
0

指定した方法で正確に行うことができます。このようにFactoryBeanを定義します。Customer Bean を生成する場合:

public class CustomFactoryBean implements FactoryBean<Customer>{

    private int customProperty;

    public int getCustomProperty() {
        return customProperty;
    }

    public void setCustomProperty(int customProperty) {
        this.customProperty = customProperty;
    }

    @Override
    public Customer getObject() throws Exception {
        if (customProperty==1)
            return new Customer("1", "One");        
        return new Customer("999", "Generic");
    }

    @Override
    public Class<?> getObjectType() {
        return Customer.class;
    }

    @Override
    public boolean isSingleton() {
        return true;
    }
}

基本的には以上です。ファクトリ Bean のプロパティに注入する方法に基づいて、実際の Bean のインスタンス化をgetObject上記の方法で制御できます。

于 2012-08-23T14:33:41.833 に答える