工作机制

http://happiness0617.iteye.com/blog/2299375

1 内部工作机制 



对于这个IOC流水线,其实没必要了解太过详细,大概知道Spring从加载配置文件到创建一个完整Bean的大概流程就可以。如果需要详细了解spring的内部实现,可以参考Spring源码解析。我过段时间也会去看看那本书。 

2.BeanDefinition 
  org,soringframework.beans.factory.config.BeanDefinition是配置文件<bean>元素标签在容器中内部表示形式。一般情况下,BeanDefinition只在容器启动时加载并解析,除非容器刷新或重启,这些信息不回发生变化,当然如果用户有特殊的需求,也可以通过编程的方式运行期调整BeanDefinition的定义。 
  创建最终的BeanDefinition主要包括两个步骤 

  • 1.利用BeanDefinition对配置信息Resource进行读取,通过XML解析器解析配置信息的DOM对象,简单的为每个<bean>生成对应的BeanDefinition对象。但是这里生成的BeanDefinition可能是半成品,因为在配置文件中,我们可能通过占位符变量引用外部属性文件的属性,这些占位符变量在这一步还没有被解析出来
  • 利用容器中注册的BeanFactoryPostProcessor对半成品的BeanDefinition进行加工处理,将以占位符表示的配置解析为最终的实际值,这样半成品的BeanDefinition就为成品的BeanDefinition。



3.InstantiationStrategy 
org.springframework.beans.factory.support.InstantiationStrategy负责根据BeanDefinition对象创建一个Bean实例。Spring之所以实例化Bean的工作通过一个策略接口进行藐视,是为了方便可以采用不同的实例化策略,以便满足不同的应用需求。 

4.BeanWrapper 
org.springframework.beansBeanWrapper是Spring框架中重要的组件类。BeanWrapper相当于一个代理器,Spring通过BeanWrapper完成Bean属性的填充工作。在bean实例被InstantiationStrategy创建出来之后,容器主控制程序将bean实例通过BeanWrapper包装起来。 
  

二,属性编辑器 
  在Spring配置文件里,我们往往通过字面值为Bean各种类型的属性提供设置值:不管是double类型还是int类型,在配置文件中都对弈字符创类型的字面值。BeanWrapper填充Bean属性一定有一个转换器在其中起作用,这个转换器就是属性编辑器。 
  PropertyEditor是JavaBean规范定义的接口。 

三 使用外部属性文件 
简单实例 

Xml代码   收藏代码
  1. <!-- 引入jdbc.properties-属性文件-->  
  2. <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"  
  3.  p:location="classpath:com/baobaobao/placeholder/jdbc.properties"  
  4.  p:fileEncoding="utf-8"/>  
  5. <!-- 通过属性名引用属性值 -->  
  6. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  
  7.   destroy-method="close"  
  8.   p:driverClassName="${driverClassName}"  
  9.   p:url="${url}"  
  10.   p:username="${username}"  
  11.   p:password="${password}"/>  



PeopertyPlaceholderCOnfigurer其他属性 
 

  • location:如果只有一个属性文件,直接使用location属性指定就可以了,如果是多个属性文件,则可以通过locations属性进行设置,可以向配置List一样配置locations。
  • fileEncoding:属性文件的编码格式,Spring使用操作系统默认编码读取属性文件,如果属性文件采用了特殊编码,需要通过该属性显式指定。
  • order:如果配置文件中定义了多个PropertyPlaceholderConfigurer,则通过该属性指定有限顺序。
  • placeholderPrefix:在上面的例子中,么通过${属性名}引用属性文件中的属性项,其中"${"为默认的占位符前缀,可以根据需要改为其他的前缀符。
  • placeholderSuffix:占位符后缀,默认为"}"

猜你喜欢

转载自1181731633.iteye.com/blog/2375747