根据JSR330讨论,他们拒绝了@Optional
注释,因为可以使用javax.inject.Provider
接口完成等效。我没有设法做或找到任何示例,是如何实现JSR330在Spring中期望的Provider。如果我不添加豆子,例如满足MyBean
的{{1}}会引发异常。我知道我可以使用Provider<MyBean>.get()
注释,但我想知道任何人都可以演示实际有效的实现,证明JSR330对@Autowire
的原始异议是正确的吗?感谢。
答案 0 :(得分:0)
我决定实现自己的Provider
类,而不是JSR330的类。然后这成为强制依赖,实际上(很像Provider
和Optional
类)有一个getObject()
方法提供了对象。不幸的是,你无法避免框架依赖,所以我最终在我的框架依赖类中实现了接口,利用框架属性来做可选的依赖,例如:
public class ThreadServiceProvider implements OptionalDependency<ScheduledExecutorService> {
/** Spring executor factory bean. */
private ScheduledExecutorFactoryBean provider = null;
@Override
public final ScheduledExecutorService getObject() {
if (provider != null) {
return provider.getObject();
}
return null;
}
/**
*
* Sets the factory bean for providing threads.
*
* @param factory
* Spring thread factory bean.
*/
@Autowired(required = false)
public final void setProvider(final ScheduledExecutorFactoryBean factory) {
provider = factory;
}
}