Spring学习(三)---Spring容器的高级主题

阅读更多
一 Spring容器技术内幕

1 内部工作机制

Spring学习(三)---Spring容器的高级主题_第1张图片

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

2.BeanDefinition
  org,soringframework.beans.factory.config.BeanDefinition是配置文件元素标签在容器中内部表示形式。一般情况下,BeanDefinition只在容器启动时加载并解析,除非容器刷新或重启,这些信息不回发生变化,当然如果用户有特殊的需求,也可以通过编程的方式运行期调整BeanDefinition的定义。
  创建最终的BeanDefinition主要包括两个步骤
  • 1.利用BeanDefinition对配置信息Resource进行读取,通过XML解析器解析配置信息的DOM对象,简单的为每个生成对应的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规范定义的接口。

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






PeopertyPlaceholderCOnfigurer其他属性
 
  • location:如果只有一个属性文件,直接使用location属性指定就可以了,如果是多个属性文件,则可以通过locations属性进行设置,可以向配置List一样配置locations。
  • fileEncoding:属性文件的编码格式,Spring使用操作系统默认编码读取属性文件,如果属性文件采用了特殊编码,需要通过该属性显式指定。
  • order:如果配置文件中定义了多个PropertyPlaceholderConfigurer,则通过该属性指定有限顺序。
  • placeholderPrefix:在上面的例子中,么通过${属性名}引用属性文件中的属性项,其中"${"为默认的占位符前缀,可以根据需要改为其他的前缀符。
  • placeholderSuffix:占位符后缀,默认为"}"
  • Spring学习(三)---Spring容器的高级主题_第2张图片
  • 大小: 119.1 KB
  • 查看图片附件

你可能感兴趣的:(spring,bean)