spring 筆記2 PropertiesLoaderSupport

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章