一尘不染

可以有条件地声明spring bean吗?

spring

有没有一种方法可以有条件地声明Spring bean:

<bean class="path.to.the.class.MyClass" if="${1+2=3}" />

不必使用配置文件,这将很有用。我没有特定的用例,但这是我想到的。


阅读 333

收藏
2020-04-20

共1个答案

一尘不染

你可以使用@Conditional从spring4或@ConditionalOnProperty从springBoot.。

  1. Using Spring4 (only)
    如果你不使用Spring Boot,这可能会过大。

首先,创建一个Condition类,在其中ConditionContext可以访问Environment

public class MyCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context,
                           AnnotatedTypeMetadata metadata) {
        Environment env = context.getEnvironment();
        return null != env
                && "true".equals(env.getProperty("server.host"));
    }
}

然后注释你的bean:

@Bean
@Conditional(MyCondition.class)
public ObservationWebSocketClient observationWebSocketClient() {
    //return bean
}

2.使用Spring Boot:

@ConditionalOnProperty(name="server.host", havingValue="localhost")

在你的abcd.properties文件中

server.host=localhost
2020-04-20