根据JSR330的讨论,他们拒绝了@Optional注释,因为javax.inject.Provider接口可以完成相同的工作。我没有做到的是,或者没有找到任何示例,是如何在Spring中实现JSR330所期望的提供者。如果我没有添加一个满足Provider<MyBean>.get()的bean,比如MyBean,它会抛出一个异常。我知道我可以使用@Autowire注解,但我想知道有谁可以演示一个实际工作的实现,证明JSR330最初反对@Optional的理由是正确的?谢谢。
发布于 2016-09-13 18:27:30
我决定实现我自己的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;
}
}https://stackoverflow.com/questions/33570112
复制相似问题