8

たとえば、私はクラスを持っています

public class Car{
     private Motor motor;

     public void setMotor(Motor motor){
          this.motor = motor;
     }   
}

私の豆は次のように見えます

<bean id="car" class="Car">
    <property name="motor" ref="${motorProvider.getAvailableMotor()}"/>
</bean>

このメソッド motorProvider.getAvailableMotor()は、使用するモーターの Bean 名 (文字列) を返します。

ただし、そのような Bean (そのような名前を持つ) が作成されない場合があります。どうすれば確認できますか?

4

2 に答える 2

19

やり方はいくつかパターンがあります。これが私がよく使うものです:

public class Car{
     private Motor motor;

     @Autowired
     private ApplicationContext applicationContext;

     @PostConstruct
     public void init() {
        try {
            motor = applicationContext.getBean( Motor.class );
        } catch( NoSuchBeanDefinitionException e ) {
            motor = new DefaultMotor();
        }
     }
}

を呼び出すこともできますapplicationContext.containsBeanDefinition(name)が、コンテキストを 2 回検索することに注意してください (1 回containsBeanDefinition()目と 2 回目の呼び出し時getBean())。通常、例外をキャッチする方が高速です。

「Bean が存在しない」という特定の例外をキャッチするため、if/を使用しelseてもほとんど利点がなくなります。

于 2013-02-06T08:25:58.880 に答える
3

SPEL; 何かのようなもの:

<property name="motor" value="#(if(${motorProvider} != null) ${motorProvider.getAvailableMotor()})"/>

ここでも議論されたと思います: Spring - 値が null でない場合にのみプロパティを設定します。彼らが前に言ったように、詳細についてはhttp://static.springsource.org/spring/docs/3.0.5.RELEASE/reference/expressions.htmlを参照してください。

于 2013-02-06T07:51:07.100 に答える