Java 如何使@Resource成为可选的?
有没有办法让@Resource成为可选的?这意味着如果我没有@Resource请求的类型的bean,我将不会得到异常,但它将被设置为null。ok看起来不可能。必须使用@Autowired(必需=false)。这不是我想要的,但它可以做到。您应该能够使用自定义factory bean来实现这一点:Java 如何使@Resource成为可选的?,java,spring,jakarta-ee,Java,Spring,Jakarta Ee,有没有办法让@Resource成为可选的?这意味着如果我没有@Resource请求的类型的bean,我将不会得到异常,但它将被设置为null。ok看起来不可能。必须使用@Autowired(必需=false)。这不是我想要的,但它可以做到。您应该能够使用自定义factory bean来实现这一点: public class OptionalFactoryBean<T> implements BeanFactoryAware, FactoryBean<T> { p
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。您可以在资源类型上使用
@Value
和默认值({null}
)
@Value("some-data.txt:#{null}") Resource resource
如果文件some-data.txt不存在,则属性不会设置为null
,而是具有不存在文件的资源。您可以调用resource.exists()
而不是resource!=空
public ResourceExample(@Value("some-data.txt:#{null}") Resource resource) {
if (resource.exists()) {
something(resource.getFile());
}
}
看这里可能对你有帮助好吧看起来不可能。必须使用@Autowired(必需=false)。这不是我想要的,但它会让资源成为可选的,所以这就是你想要做的,即使你不知道:)Autowired和resource是两个不同的东西,试着用Autowired进行注入-它只对bean有效,而对resources@DanubianSailor-
@Autowired
是Spring注释,而@Resource
是一种常见的Java注释。如果您没有使用Spring,那么@Autowired
甚至都不是一个选项。
@Value("some-data.txt:#{null}") Resource resource
public ResourceExample(@Value("some-data.txt:#{null}") Resource resource) {
if (resource.exists()) {
something(resource.getFile());
}
}