propertysource「propertysource注解」
springboot加载自定义properties原理
springboot自定义属性文件通过value注解引入,和@autowired不同的是,它是由ConfigurationClassPostProcessor这个BeanDefinitionRegistryPostProcessor来处理,属性文件的读取和注入是在BeanDefinition级别,对象实例化之前。
我们建一个简单的类的梳理一下。

调用堆栈 从refresh开始,主要走了这几个方法:
invokeBeanFactoryPostProcessors
invokeBeanDefinitionRegistryPostProcessors
ConfigurationClassPostProcessor-processConfigBeanDefinitions
ConfigurationClassParser-doProcessConfigurationClass
ConfigurationClassParser-processPropertySource
ConfigurationClassParser-addPropertySource
ConfigurationClassParser主要方法:
doProcessConfigurationClass-processPropertySource-addPropertySource
逻辑主要集中在doProcessConfigurationClass方法
doProcessConfigurationClass负责解析@PropertySource,@Import annotations,@ComponentScan等注解 。
1 调用processPropertySource处理自身的propertySource
2 扫描类上的ComponentScan,对扫出的类继续调用parse
3 处理@Import annotations等其他标签
processPropertySource结构很简单:
1根据注解里的location属性载入配置文件
2调用addPropertySource处理每个属性文件
addPropertySource这个类才是真正处理@value属性:
1把用户定义的properties文件加到Eniverment中去
2如果有相同name的属性文件,需要合并
CompositePropertySource 的场景其实是你有两个不同的文件,但是 @PropertySource中设置同样的name属性,这样CompositePropertySource 会做一个合并,按加入的时间顺序取。
增加一个product2,PropertySource name都设置为myprod
debug到addPropertySource,newSource和existing已经不一样了。
environment的propertySources里也有两份文件了。
SpringBoot项目使用@PropertySource注解加载properties配置文件,但输出对象值为null
不是要加上前缀?
@ConfigurationProperties(prefix = "Example")
@PropertySource("classpath:my.properties")//这是属性文件路径
spring的常用注解是什么?
Spring Boot常用注解
1、@SpringBootApplication
替代 @SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan
2、@ImportAutoConfiguration
导入配置类,一般做测试的时候使用,正常优先使用@EnableAutoConfiguration
3、@SpringBootConfiguration
替代@Configuration
4、@ImportResource
将资源导入容器
5、@PropertySource
导入properties文件
6、PropertySources
@PropertySource 的**
扩展资料:
Controller 该类为Controller。
RequestMapping 配置方法路径等信息。
ResponseBody 返回值,例如JSON,XML。
PathVariable 获取RESTFUL路径中的值如 /company/{corpId}/dept/{deptId}。
RequestParam 获取Request参数值如xxx?from=index_nav。
Component,Repository,Service。
一般用Repository,service用Service,需要多个service时,一般用Componet。
参考资料来源:百度百科-spring MVC