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

标签 java spring spring-annotations

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

即像这样的东西:

@Component
public class MyCondition implements Condition{

    @Autowired
    MyBean myBean;

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

即在某些情况下,我必须获取数据库 session bean 并检查数据库中的某些内容,然后才能判断条件是真还是假。
我需要将该条件与 @Conditional 注释一起使用。 IE。 :

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

最佳答案

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

cause premature bean instantiation, violating the container and causing unintended side-effects

因此,在您的情况下,如果您的条件引用数据库 bean,则数据库可能会在容器能够满足其先决条件之前实例化。

关于java - 是否可以在条件中使用 Spring Bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49009885/

相关文章:

java - 加载 Java 配置文件的整个文件夹?

java - EDT队列切割

Java Android 代码将在 Nougat 上运行。如何在其他安卓上运行

java - 有什么方法可以注入(inject)依赖项,以便它可以在构造函数中使用吗?

java - 在这种情况下创建了多少 Spring bean

java - Spring 缓存: How to specify global @CacheConfig for application

java - 使用重新抛出已检查/未检查的异常?

java - ARCore – 光估计

java - 如何比较两个不同页面中的两种产品

spring - 在带有 Spring 的 JUnit 中,如何使用 Mockito (1.10.18) 在 @Service 上创建 spy ?