有没有一种方法可以有条件地声明Spring bean:
<bean class="path.to.the.class.MyClass" if="${1+2=3}" />
不必使用配置文件,这将很有用。我没有特定的用例,但这是我想到的。
你可以使用@Conditional从spring4或@ConditionalOnProperty从springBoot.。
首先,创建一个Condition类,在其中ConditionContext可以访问Environment:
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