@ConditionalOnProperty注解可以根据属性值来控制类或某个方法是否需要加载。它既可以放在类上也可以放在方法上。
1).在application.yml中设置配置属性
myconfig:
#配置是否加载类
is_load_bean: true
2).编写加载类
package com.simoniu.spt.course.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
/* @author: simoniu
* @description: 使用@ConditionalOnProperty
* @date: 2023/4/24 10:20
**/
@Component
@Slf4j
@ConditionalOnProperty(value = "myconfig.is_load_bean",havingValue = "true",matchIfMissing = true)
public class MyConditionalConfig {
@Value("${myconfig.is_load_bean}")
private String isLoadBean;
public MyConditionalConfig(){
log.info("MyConditionalConfig is constructed...");
}
@Bean
@ConditionalOnProperty(value = "is_load_bean",havingValue = "true",matchIfMissing = true)
public Object loadBean(){
log.info("执行loadBean()....");
return new Object();
}
@Bean
public void compareLoadBean(){
log.info("加载bean属性:" + isLoadBean);
}
}
启动项目:
2024-01-30 09:15:25.760 INFO 11420 --- [ restartedMain] c.s.s.course.config.MyConditionalConfig : MyConditionalConfig is constructed...
2024-01-30 09:15:25.809 INFO 11420 --- [ restartedMain] c.s.s.course.config.MyConditionalConfig : 执行loadBean()....
2024-01-30 09:15:25.809 INFO 11420 --- [ restartedMain] c.s.s.course.config.MyConditionalConfig : 加载bean属性:true
当配置文件的is_load_bean属性信息改成false时则不会打印上面三行输出的结果。