@Configuration
public class MyConfiguration {
@Bean
public MyBean myBean() {
return new MyBean();
}
@Bean
@ConditionalOnBean(MyBean.class)
public AnotherBean anotherBean() {
return new AnotherBean();
}
}
在这个例子中:
如果 MyBean 不存在,anotherBean() 就不会被创建。这是一种根据上下文中是否存在特定 bean 有条件地配置应用程序的方法。
@Configuration
@ConditionalOnClass(name = "org.springframework.web.servlet.DispatcherServlet")
public class MyConfiguration {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
在这个例子中:
SpEL表达式
myapp.feature.enabled=true
@Configuration
@ConditionalOnExpression("${myapp.feature.enabled:true}")
public class MyConfiguration {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
@Configuration
@ConditionalOnJava(range = ConditionalOnJava.Range.EQUAL_OR_NEWER, value = JavaVersion.EIGHT)
public class MyConfiguration {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
在这个例子中:
@Configuration
@ConditionalOnJndi("java:comp/env/jdbc/myDataSource")
public class MyConfiguration {
@Bean
public MyDataSource myDataSource() {
// Configuration for the DataSource
return new MyDataSource();
}
}
在这个例子中:
@Configuration
public class MyConfiguration {
@Bean
@ConditionalOnMissingBean
public MyBean myBean() {
return new MyBean();
}
}
在这个例子中:
@Configuration
@ConditionalOnMissingClass("com.example.ExampleClass")
public class MyConfiguration {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
在这个例子中:
@Configuration
@ConditionalOnNotWebApplication
public class MyConfiguration {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
在这个例子中:
@Configuration
@ConditionalOnProperty(name = "myapp.feature.enabled", havingValue = "true")
public class MyConfiguration {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
在这个例子中:
你可以使用 name 指定配置属性的名称,havingValue 指定期望的属性值,还可以通过 matchIfMissing 指定当配置属性不存在时是否匹配,默认值为 false。
10.@ConditionalOnResource
@Configuration
@ConditionalOnResource(resources = "myconfig.properties")
public class MyConfiguration {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
在这个例子中:
@Configuration
public class MyConfiguration {
@Bean
@ConditionalOnSingleCandidate(MyService.class)
public MyBean myBean(MyService myService) {
return new MyBean(myService);
}
}
在这个例子中:
@Configuration
@ConditionalOnWebApplication
public class MyWebConfiguration {
@Bean
public MyWebBean myWebBean() {
return new MyWebBean();
}
}
在这个例子中: