@Resource をオプションにする方法はありますか? これは、@Resource によって要求されたタイプの Bean がない場合、例外は取得されず、null に設定されるだけであることを意味します。
質問する
6353 次
3 に答える
1
これを実現するには、カスタム ファクトリ Bean を使用できるはずです。
public class OptionalFactoryBean<T> implements BeanFactoryAware, FactoryBean<T> {
private String beanName;
public void setBeanName(String beanName) {
this.beanName = beanName;
}
@Override
public T getObject() throws Exception {
T result;
try {
result = beanFactory.getBean(beanName);
} catch (NoSuchBeanDefinitionException ex) {
result = null;
}
return result;
}
private BeanFactory beanFactory;
@Override
public void setBeanFactory(BeanFactory beanFactory) {
this.beanFactory = beanFactory;
}
private Class<?> objectType = Object.class;
public void setObjectType(Class<?> objectType) {
this.objectType = objectType != null? objectType : Object.class;
}
@Override
public Class<?> getObjectType() {
return objectType;
}
@Override
public boolean isSingleton() {
return true;
}
}
オプションの Bean の Spring 構成は次のようになります。
<bean id="myBean" class="mypackage.OptionalFactoryBean" scope="singleton">
<property name="beanName" value="myRealBean"/>
<property name="objectType" value="mypackage.MyRealBean"/>
</bean>
null
そして、あなたは注射されるでしょう。次に、次のように定義できます。
<bean id="myRealBean" class="mypackage.MyRealBean" ...>
<!-- .... -->
</bean>
特定の Bean を注入したい場合。
于 2013-05-15T08:41:32.083 に答える