当前位置:首页 > 英文周记 > 正文内容

propertysource「propertysource注解」

更新时间:2026-07-18 05:11:49 周记网3年前 (2023-02-18)英文周记127

springboot加载自定义properties原理

springboot自定义属性文件通过value注解引入,和@autowired不同的是,它是由ConfigurationClassPostProcessor这个BeanDefinitionRegistryPostProcessor来处理,属性文件的读取和注入是在BeanDefinition级别,对象实例化之前。

我们建一个简单的类的梳理一下。

propertysource「propertysource注解」

调用堆栈 从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

标签: propertysource

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。