spring 笔记2 PropertiesLoaderSupport

本文详细介绍了Spring中与属性配置相关的类,如PropertiesLoaderSupport、PropertiesFactoryBean、PropertyResourceConfigurer等,重点讲解了这些类在处理属性文件、Bean定义属性修改、占位符替换等方面的作用和工作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public abstract class PropertiesLoaderSupport
    public class PropertiesFactoryBean extends PropertiesLoaderSupport  implements FactoryBean<Properties>, InitializingBean
    public abstract class PropertyResourceConfigurer extends PropertiesLoaderSupport implements BeanFactoryPostProcessor, PriorityOrdered
	      public abstract class PlaceholderConfigurerSupport extends PropertyResourceConfigurer implements BeanNameAware, BeanFactoryAware
		         public class PropertyPlaceholderConfigurer extends PlaceholderConfigurerSupport
				       public class PreferencesPlaceholderConfigurer extends PropertyPlaceholderConfigurer implements InitializingBean
				 public class PropertySourcesPlaceholderConfigurer extends PlaceholderConfigurerSupport implements EnvironmentAware
		  public class PropertyOverrideConfigurer extends PropertyResourceConfigurer


 
1、 PropertiesLoaderSupport的mergeProperties方法混合从文件读取(使用loadProperties方法)的和自身设置进去的property,




2、 PropertiesFactoryBean实现了FactoryBean,用来生产Properties,可以配置是否单例
 




3、PropertyResourceConfigurer
BeanFactoryPostProcessor  实现该接口,可以在spring的bean创建之前,修改bean的定义属性。也就是说,Spring允许BeanFactoryPostProcessor
在容器实例化任何其它bean之前读取配置元数据,并可以根据需要进行修改,例如可以把bean的scope从singleton改为prototype,也可以把property的值给修改掉。
可以同时配置多个BeanFactoryPostProcessor,并通过设置'order'属性来控制各个BeanFactoryPostProcessor的执行次序。


PropertyResourceConfigurer 的postProcessBeanFactory方法,做了一次property的转换,提供了一个protect方法convertPropertyValue(自身未做转换)
然后提供了一个虚方法processProperties(ConfigurableListableBeanFactory beanFactory, Properties props)供子类重写


4、PlaceholderConfigurerSupport
设置了替换值的前缀,后缀比如${}
没有实现父方法processProperties
提供了一个doProcessProperties(ConfigurableListableBeanFactory beanFactoryToProcess,StringValueResolver valueResolver)
这个方法里面拿出说有的BeanDefinition根据一定规则做了修改(visitor.visitBeanDefinition(bd)),比如替换掉${}的属性
public void visitBeanDefinition(BeanDefinition beanDefinition) {
		visitParentName(beanDefinition);
		visitBeanClassName(beanDefinition);
		visitFactoryBeanName(beanDefinition);
		visitFactoryMethodName(beanDefinition);
		visitScope(beanDefinition);
		visitPropertyValues(beanDefinition.getPropertyValues());
		ConstructorArgumentValues cas = beanDefinition.getConstructorArgumentValues();
		visitIndexedArgumentValues(cas.getIndexedArgumentValues());
		visitGenericArgumentValues(cas.getGenericArgumentValues());
	}



5、PropertyPlaceholderConfigurer
实现了processProperties  构造了StringValueResolver valueResolver = new PlaceholderResolvingStringValueResolver(props);
调用父方法doProcessProperties
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值