目录
- 前言
- 1. 基本知识
- 2. Demo
前言
基本的Java知识推荐阅读:
- java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)
- 【Java项目】实战CRUD的功能整理(持续更新)
从实战中学习启发
1. 基本知识
@ConditionalOnProperty 是 Spring Framework 中的一个注解,用于根据特定的属性值条件性地加载 Spring 组件
通常用于配置类或组件中,以便在满足特定条件时激活某个 Bean
基本的概念如下:
- 用途:@ConditionalOnProperty 用于条件性地创建和配置 Spring Bean,当某个特定的配置属性存在并且符合特定值时,才会创建该 Bean
- 属性:
name
:需要检查的属性名,可以是一个或多个属性名
havingValue
:属性的值,只有当属性值与此相等时,条件才会成立。默认值为空字符串
matchIfMissing
:当指定的属性不存在时,是否匹配。默认值为 false,表示如果属性缺失,则条件不成立
基本的作用 有如下:
- 灵活配置:可以通过外部配置(如 application.properties 或 application.yml)来控制 Bean 的加载,支持不同环境下的配置
- 减少启动时间:只在需要时加载特定的 Bean,从而减少应用程序的启动时间和内存占用
- 增强模块化:通过条件性加载,可以实现功能模块的分离和组合,使得应用更具可扩展性
2. Demo
整体架构分别如下:
对应的代码如下:
// DemoApplication.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}// MyService.java
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Service;@Service
@ConditionalOnProperty(name = "app.feature.enabled", havingValue = "true", matchIfMissing = false)
public class MyService {public void execute() {System.out.println("MyService is active!");}
}// MyAppRunner.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;@Component
public class MyAppRunner implements CommandLineRunner {@Autowired(required = false) // 使得该注入为可选private MyService myService;@Overridepublic void run(String... args) {if (myService != null) {myService.execute();} else {System.out.println("MyService is not active!");}}
}
在 src/main/resources/application.properties 中添加以下配置:
# 启用特性
app.feature.enabled=true
如果将 app.feature.enabled 的值设置为 false 或不设置该属性,则 MyService 不会被激活,控制台将输出 MyService is not active!
设置之后,将会被激活