IOC课程整理-19 Spring Environment 抽象

1. 理解 Spring Environment 抽象

IOC课程整理-19 Spring Environment 抽象_第1张图片

2. Spring Environment 接口使用场景

IOC课程整理-19 Spring Environment 抽象_第2张图片

3. Environment 占位符处理

IOC课程整理-19 Spring Environment 抽象_第3张图片

4. 理解条件配置 Spring Profiles

IOC课程整理-19 Spring Environment 抽象_第4张图片

5. Spring 4 重构 @Profile

6. 依赖注入 Environment

IOC课程整理-19 Spring Environment 抽象_第5张图片

7. 依赖查找 Environment

IOC课程整理-19 Spring Environment 抽象_第6张图片

8. 依赖注入 @Value

IOC课程整理-19 Spring Environment 抽象_第7张图片

9. Spring 类型转换在 Environment 中的运用

IOC课程整理-19 Spring Environment 抽象_第8张图片

10. Spring 类型转换在 @Value 中的运用

IOC课程整理-19 Spring Environment 抽象_第9张图片

11. Spring 配置属性源 PropertySource

IOC课程整理-19 Spring Environment 抽象_第10张图片

12. Spring 內建的配置属性源

IOC课程整理-19 Spring Environment 抽象_第11张图片

13. 基于注解扩展 Spring 配置属性源

IOC课程整理-19 Spring Environment 抽象_第12张图片

14. 基于 API 扩展 Spring 配置属性源

IOC课程整理-19 Spring Environment 抽象_第13张图片

15. 课外资料

IOC课程整理-19 Spring Environment 抽象_第14张图片

16. 面试题精选

简单介绍 Spring Environment 接口?

IOC课程整理-19 Spring Environment 抽象_第15张图片

如何控制 PropertySource 的优先级?

在Spring中,PropertySource是用于加载和读取属性配置的机制。当存在多个PropertySource时,可以通过优先级来控制它们的加载顺序和覆盖关系。下面介绍几种常见的控制PropertySource优先级的方式:

1. 使用@Order注解: 在Spring中,可以使用@Order注解为PropertySources进行排序。@Order注解的值越小,优先级越高,即优先级越高的PropertySource先被加载。

```
@Configuration
@PropertySources({
    @PropertySource("classpath:config1.properties"),
    @PropertySource("classpath:config2.properties")
})
public class AppConfig {

    @Bean
    @Order(1) // 指定优先级,数字越小优先级越高
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }
}
```

2. 使用spring.profiles.active属性:在Spring Boot中,可以通过设置`spring.profiles.active`属性来决定哪个PropertySource会被加载。根据active profile的不同,Spring会加载相应的PropertySource。

```
@Configuration
@PropertySource(value = "classpath:config1.properties", ignoreResourceNotFound = true)
@PropertySource(value = "classpath:config2.properties", ignoreResourceNotFound = true)
public class AppConfig {

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        configurer.setIgnoreUnresolvablePlaceholders(true);
        return configurer;
    }
}
```

通过设置`spring.profiles.active`属性为相应的配置文件名,控制只加载对应的PropertySource。

3. 使用spring.config.name和spring.config.location属性:在Spring Boot中,可以通过设置`spring.config.name`和`spring.config.location`属性来指定加载的配置文件名和位置。根据配置文件的顺序,后面的配置文件会覆盖前面的。

```
java -jar myproject.jar --spring.config.name=config1,config2
java -jar myproject.jar --spring.config.location=classpath:/default/,classpath:/custom/
```

以上是几种常见的控制PropertySource优先级的方式。根据具体的需求和场景,选择合适的方式来管理和控制属性配置的加载顺序。

当存在多个PropertySource时,它们的加载顺序会影响属性的优先级和覆盖关系。除了前面提到的方式,还可以使用以下方法控制PropertySource的优先级:

4. 使用@PropertySource注解的顺序:在使用@PropertySource注解加载属性配置文件时,可以通过调整注解的顺序来控制加载顺序和优先级。

```java
@Configuration
@PropertySource("classpath:config1.properties") // 优先级低
@PropertySource("classpath:config2.properties") // 优先级高
public class AppConfig {
    // ...
}
```

上述示例中,config2.properties的优先级更高,它的配置会覆盖config1.properties中相同的属性值。

5. 使用Environment的getPropertySources方法:通过Environment对象可以获取到加载的PropertySource,并且可以通过添加和移除PropertySource来调整它们的优先级。

```java
@Autowired
private Environment environment;

@PostConstruct
public void modifyPropertySourcePriority() {
    MutablePropertySources propertySources = ((AbstractEnvironment) environment).getPropertySources();
    // 调整PropertySource的优先级
    propertySources.addFirst(new ResourcePropertySource("classpath:config2.properties"));
}
```

上述示例中,通过调用addFirst方法将config2.properties的PropertySource添加到第一个位置,从而提高了它的优先级。

通过以上方法,可以灵活地控制和调整PropertySource的加载顺序,从而控制属性的优先级和覆盖关系。根据具体的需求和场景,选择合适的方式来管理和调整PropertySource的优先级。

你可能感兴趣的:(java,面试,前端)