环境抽象 - Environment
概述
Environment 接口提供了统一的配置属性访问抽象,支持属性源、Profile 等高级特性。
核心能力矩阵
| 能力 | 核心类 | 解决的问题 | 使用频率 | 学习优先级 |
|---|---|---|---|---|
| 环境抽象 | Environment/PropertySource | 配置管理 | ⭐⭐⭐⭐ | 🟡 中 |
核心组件
主要功能
1. 属性访问
java
@Autowired
private Environment env;
// 获取属性
String property = env.getProperty("app.name");
Integer port = env.getProperty("server.port", Integer.class);
String defaultValue = env.getProperty("app.description", "Default Description");
// 检查属性是否存在
if (env.containsProperty("app.feature.enabled")) {
// ...
}2. Profile 管理
java
// 检查激活的 Profile
boolean isDev = env.acceptsProfiles(Profiles.of("dev"));
boolean isProd = env.acceptsProfiles(Profiles.of("prod"));
// 获取激活的 Profiles
String[] activeProfiles = env.getActiveProfiles();
String[] defaultProfiles = env.getDefaultProfiles();3. 属性源
java
// 创建属性源
Map<String, Object> map = new HashMap<>();
map.put("custom.key", "custom.value");
PropertySource<?> propertySource = new MapPropertySource("custom", map);
// 添加到环境
MutablePropertySources propertySources = ((ConfigurableEnvironment) env).getPropertySources();
propertySources.addFirst(propertySource);属性源优先级
- ServletConfig 参数
- ServletContext 参数
- JNDI 属性
- 系统环境变量
- 系统属性(-D 参数)
- 应用配置文件(application.properties/yml)
使用场景
- 配置属性访问
- 多环境配置(Profile)
- 动态属性源
- 配置中心集成