SpringBoot 属性配置解析
2023-12-13 10:01:18
    		属性配置介绍
spring官方提供的17中属性配置的方式

- Devtools全局配置
- 测试环境@TestPropertySource注解
- 测试环境properties属性
- 命令行参数
- SPRING_APPLICATION_JSON属性
- ServletConfig初始化参数
- ServletContext初始化参数
- JNDI属性
- JAVA系统属性
- 操作系统环境变量
- RandomValuePropertySource随机值属性
- jar包外的application-{profile}.properties
- jar包内的application-{profile}.properties
- jar包外的application.properties
- jar包内的application.properties
- @PropertySource绑定配置
- 默认属性
Spring Aware介绍
Aware介绍
- Spring框架优点:Bean感知不到容器的存在
- 使用场景:需要使用Spring容器的功能资源
- 引入缺点:Bean和容器强耦合
常用Aware

Aware调用


自定义实现Aware

import org.springframework.beans.factory.Aware;
public interface MyAware extends Aware {
    void setFlag(Flag flag);
}@Component
public class MyAwareProcessor implements BeanPostProcessor {
    private final ConfigurableApplicationContext configurableApplicationContext;
    public MyAwareProcessor(ConfigurableApplicationContext configurableApplicationContext) {
        this.configurableApplicationContext = configurableApplicationContext;
    }
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        if (bean instanceof Aware) {
            if (bean instanceof MyAware) {
                ((MyAware) bean).setFlag((Flag) configurableApplicationContext.getBean("flag"));
            }
        }
        return bean;
    }
}Environment解析

getOrCreateEnvironment
- 添加servletConfigInitParams属性集
- 添加servletContextInitParams属性集
- 添力Jndi属性集
- 添加systemProperties属性集
- 添加systemEnvironment属性集
configureEnvironment
- 添加defaultProperties厲性集
- 添加commandLineArgs属性集
listener.environmentPrepared
- 添加spring_application_json属性集
- 添加vcap属性集
- 添加random属性集
- 添加application-profile.(properties | yml)属性集
ConfigurationPropertySources.attach
- 添加configurationProperties属性集
ConfigurationClassParser
- 添加@PropertySources属性集
Spring profile介绍
将不同的参数配置绑定在不同的环境
默认使用
- application.properties
- application-default.properties
激活profile
- spring.profiles.active=xx
- spring.profiles.active与- default互斥(即配置active后- application-default.properties会失效)
Spring profile原理解析
源码流程解析

处理入口

initializeProfiles逻辑

profiles处理

profile处理逻辑

Load逻辑

addLoadedPropertySources

面试题
- SpringBoot属性配置方式有哪些?
- 介绍下Spring Aware的作用及常见的有哪些?
- Spring Aware注入原理?
- 动手写一个Spring Aware?
- Environment对象是如何加载属性集的?
- 部分属性集如spring_application_json何时被加载的?
- 介绍下Spring Profile?常用配置方式?
- Spring Profile配置方式有哪些注意事项,为什么?
- Spring Profile处理逻辑?
    			文章来源:https://blog.csdn.net/Box_clf/article/details/134843922
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
    	本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!