可选的依赖项,Spring和JSR330

时间:2015-11-06 15:26:31

标签: java spring dependency-injection

根据JSR330讨论,他们拒绝了@Optional注释,因为可以使用javax.inject.Provider接口完成等效。我没有设法做或找到任何示例,是如何实现JSR330在Spring中期望的Provider。如果我不添加豆子,例如满足MyBean的{​​{1}}会引发异常。我知道我可以使用Provider<MyBean>.get()注释,但我想知道任何人都可以演示实际有效的实现,证明JSR330对@Autowire的原始异议是正确的吗?感谢。

1 个答案:

答案 0 :(得分:0)

我决定实现自己的Provider类,而不是JSR330的类。然后这成为强制依赖,实际上(很像ProviderOptional类)有一个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;
    }
}