是否可以在条件中使用Spring Bean?

时间:2018-02-27 13:31:28

标签: java spring spring-annotations

我想创建一个使用特殊Bean的Condition。有可能吗?

即。像这样的东西:

@Component
public class MyCondition implements Condition{

    @Autowired
    MyBean myBean;

    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        return myBean.isTrue();
    }
}

即。在某些情况下,我必须得到一个数据库会话bean并检查数据库中的某些内容,然后才能说出条件是真还是假。
我需要将该条件与@Conditional注释一起使用。 即:

@Conditional(MyCondition.class)
@Configuration
public class Config{
//...
}

1 个答案:

答案 0 :(得分:1)

不,你不能。正如文档中所述,这是因为它可能

  

导致过早的bean实例化,违反容器并导致意外的副作用

所以在你的情况下,如果你的条件引用了一个DB bean,那么在容器能够满足它的前提条件之前,DB可能会被实例化。