Czy jest jakiś sposób, aby uczynić @Resource opcjonalnym? Oznacza to, że jeśli nie mam fasoli typu żądanej przez @Resource, nie otrzymam wyjątku, ale zostanie on ustawiony na wartość null.W jaki sposób czynisz @Resource opcjonalnym?
Odpowiedz
OK wygląda na to, że nie jest możliwe. Musiał użyć @Autowired (required = false). Nie to, czego dokładnie chciałem, ale to zrobi.
To sprawia, że zasób jest opcjonalny, więc jest to, co chcesz zrobić, nawet jeśli tego nie wiesz :) –
Autowired i Resource to dwie różne rzeczy, spróbuj wstrzyknąć
@DanubianSailor - '@ Autowired' jest adnotacją wiosenną, a' @ Resource' jest typową adnotacją Java. Jeśli nie używasz Springa, opcja '@ Autowired' nie byłaby nawet opcją. –
Powinieneś być w stanie użyć fasoli zwyczaj fabryki do osiągnięcia tego celu:
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;
}
}
konfiguracja Wiosna dla opcjonalnej fasoli byłoby:
<bean id="myBean" class="mypackage.OptionalFactoryBean" scope="singleton">
<property name="beanName" value="myRealBean"/>
<property name="objectType" value="mypackage.MyRealBean"/>
</bean>
A co można uzyskać null
wstrzykiwany. Następnie możesz zdefiniować:
<bean id="myRealBean" class="mypackage.MyRealBean" ...>
<!-- .... -->
</bean>
jeśli chcesz wstrzyknąć konkretny komponent.
zobacz tutaj http://stackoverflow.com/questions/3957430/optional-spring-bean-references.To może ci pomóc – PSR
ok wygląda na to, że nie jest to możliwe. Musiał użyć @Autowired (required = false). Nie to, czego dokładnie chciałem, ale to zrobi – MrProper