Java 有可能在特定条件下使用Springbean吗?

Java 有可能在特定条件下使用Springbean吗?,java,spring,spring-annotations,Java,Spring,Spring Annotations,我想创建一个使用特殊Bean的条件。可能吗 i、 例如: @Component public class MyCondition implements Condition{ @Autowired MyBean myBean; @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { return myBean.isTr

我想创建一个使用特殊Bean的条件。可能吗

i、 例如:

@Component
public class MyCondition implements Condition{

    @Autowired
    MyBean myBean;

    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        return myBean.isTrue();
    }
}
也就是说,在某些情况下,我必须获取数据库会话bean并检查数据库中的某些内容,然后才能确定条件是真是假。
然后,我需要将该条件与
@Conditional
注释一起使用。 即:


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

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


因此,在您的情况下,如果您的条件引用了DB bean,那么在容器能够满足其前提条件之前,DB可能会被实例化。

当然,为什么不呢?@Ashwel,因为官方文档指定:“条件必须遵循与BeanFactoryPostProcessor相同的限制,并注意永远不要与bean实例交互。对于与配置bean交互的条件更细粒度的控制考虑配置条件接口。“此时,您可以尝试从
ConditionContext.beanFactory
获取所需的bean,但请注意,如果您不小心,这可能会导致循环依赖项错误。@M.Prokhorov感谢您的帮助!
@Conditional(MyCondition.class)
@Configuration
public class Config{
//...
}