是否可以在条件中使用 Spring Bean?
Is it possible to use a Spring Bean in a Condition?
我想创建一个使用特殊 Bean 的条件。可能吗?
即像这样:
@Component
public class MyCondition implements Condition{
@Autowired
MyBean myBean;
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return myBean.isTrue();
}
}
即在某些情况下,我必须先获取数据库会话 bean 并检查数据库中的某些内容,然后才能判断条件是真还是假。
然后我需要将该条件与 @Conditional
注释一起使用。
IE。 :
@Conditional(MyCondition.class)
@Configuration
public class Config{
//...
}
不,你不能。正如文档中所说,这是因为它可能
cause premature bean instantiation, violating the container and causing unintended side-effects
所以在你的情况下,如果你的条件引用了一个数据库 bean,数据库可能会在容器能够满足其先决条件之前被实例化。
我想创建一个使用特殊 Bean 的条件。可能吗?
即像这样:
@Component
public class MyCondition implements Condition{
@Autowired
MyBean myBean;
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return myBean.isTrue();
}
}
即在某些情况下,我必须先获取数据库会话 bean 并检查数据库中的某些内容,然后才能判断条件是真还是假。
然后我需要将该条件与 @Conditional
注释一起使用。
IE。 :
@Conditional(MyCondition.class)
@Configuration
public class Config{
//...
}
不,你不能。正如文档中所说,这是因为它可能
cause premature bean instantiation, violating the container and causing unintended side-effects
所以在你的情况下,如果你的条件引用了一个数据库 bean,数据库可能会在容器能够满足其先决条件之前被实例化。