Spring容器高级主题

来源:互联网 发布:批发商软件 编辑:程序博客网 时间:2024/05/01 01:20

1.ResourceLodaer从Spring配置文件中加载Spring配置信息,并      使用Resource表示这个配置文件的资源。

  1. BeanDefinitionReader读取Resource所指向的配置文件的资源,然后解析该配置文件。配置文件的每个<bean>元素被解析成一个BeanDefinition对象,并保存到BeanDefinitionRegistry中。
  2. 容器扫描BeanDefinitionRegistry中的BeanDefinition,并对其进行加工处理。
  3. Spring容器取出加工好的BeanDefinition并调用InstantionStrategy着手进行Bean的实例化工作。
  4. 在实例化Bean时,BeanWrapper对Bean进行封装,并完成属性的设置工作。

 

 

BeanDefinition

BeanDefinition是配置文件中<bean>在Spring容器中的内部表示。

Spring将<bean>转换成BeanDefinition的表示,并将这些BeanDefinition注册到BeanDefinitionRegistry中。

 

InstantionStrategy

InstantionStrategy负责根据BeanDefinition的对象创造一个Bean的实例,相当于执行java中new的操作,但不会参与Bean属性的设置工作。

该策略通常利用Bean实现类的默认构造函数,带参数的构造函数或者工厂方法进行Bean的实例化操作。

 

BeanWrapper

BeanWrapper相当于一个代理器,Spring通过BeanWrapper完成Bean属性的填充。

BeanWrapper的实现类BeanWrapperImp具有三重身份:

(1)Bean包裹器

(2)属性访问器

(3)属性编辑注册表

 

属性编辑器:

用于将Bean在配置文件中的字面值类型转换成相应的内部类型。

任何实现java.beans.PropertyEditor接口都是属性编辑器。

 

使用外部属性文件

Spring提供了一个PropertyPlaceholderConfigurer,它能够使Bean在配置时引用外部属性文件。

在 外部属性文件中,属性名与属性值成对出现。

如:userName=zk; userId=0902140408;

 

//引用外部属性文件

<beanclass="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"

P:location="外部属性文件的位置"

P:fileEncoding="utf-8">

//通过属性名引用属性值

<beanid="" class="zk.com.Class"

P:name="${userName}"

P:id="${userId}"/>

 

使用<context:property-placeholder>引用属性文件

如:<context:property-placeholder location=“文件所在位置”/>

 

基于注解或者java类配置中引用外部属性

在xml文件中引用外部属性文件之后,可以使用@Value()引用属性。

如:

@Value("${userId}")

Private String id;

 

在属性文件内部,属性之间可以相互引用。

1 0
原创粉丝点击