小编Sto*_*ert的帖子

Spring @ConditionalOnBean 与 @Component 结合

有以下情况:


@ConditionalOnBean(ServiceD.class)
@Component
class ServiceAImpl implements ServiceA {

    private ServiceB serviceB;
    private ServiceC serviceC;
    private ServiceD serviceD;

    public ServiceA(ServiceB serviceB, ServiceC serviceC, ServiceD serviceD) {
        this.serviceB = serviceB;
        this.serviceC = serviceC;
        this.serviceD = serviceD;
    }
}

interface ServiceD {

    void doStuff();
}

@Component
class ServiceDImpl implements ServiceD {

    private ServiceE serviceE;

    public ServiceD(ServiceE serviceE) {
        this.serviceE = serviceE;
    }

    @Override
    public void doStuff() {
        //...
    }
}

Run Code Online (Sandbox Code Playgroud)

仅当存在 serviceD 实现时,我才需要加载 serviceA。

来自@ConditionalOnBean文档:“该条件只能匹配应用程序上下文到目前为止已处理的 bean 定义,因此,强烈建议仅在自动配置类上使用此条件。”

我的问题是:由于ServiceD是 …

java spring dependency-injection spring-boot

3
推荐指数
1
解决办法
2616
查看次数

标签 统计

dependency-injection ×1

java ×1

spring ×1

spring-boot ×1