您的位置:首页 > 编程语言 > Java开发

spring学习日志之三创建Bean的流程

2016-08-16 17:54 260 查看

1,Spring 容器创建一个Bean的流程

1)   ResourceLoader从存储介质中加载Spring配置信息,并使用Resource标识这个配置文件的资源。

2)   BeanDefinitionReader读取Resource所指向的配置文件资源,然后解析配置文件,配置文件中的每一个<bean>被解析成一个BeanDefinition对象,并保存到BeanDefinitionRegistry中。

3)   容器扫描BeanDefinitionRegistry中的BeanDefinition,使用Java的反射机制自动识别出Bean工厂后处理器的Bean,然后调用这些Bean工厂处理器对BeanDefinfitionRegistry中的BeanDefinition进行加工处理,主要完成两项工作:

1,       对使用到占位符的<bean>元素标签进行解析,得到最终的配置项,这意味着一些半成品额BeanDefinition对象加工处理并得到完整的BeanDefinition对象。

2,       对BeanDefinitionRegistry中的BeanDefinition进行扫描,通过Java反射机制找出所有属性编辑器的Bean,并自动将他们注册到Spring容器的属性编辑器注册表中。

4)   Spring容器从BeanDefinitionRegistry中取出加工后的BeanDefinition,并调用InstantiationStrategy着手进行Bean实例化的工作。

5)   在实例化Bean时,Spring容器使用BeanWrapper对Bean进行封装,BeanWrapper提供了很多以Java反射机制操作Bean的方法,它将结合Bean的BeanDefinition以及容器中的属性编辑器,完成Bean属性的设置工作。

6)   利用容器中注册的Bean后处理器对已经完成属性设置工作的Bean进行后续加工,直接装配出一个准备就绪的Bean。

2 ,Spring组件的分类     

1)       物料组件:Resource、BeanDefinition、PropertyEditor以及最终的Bean等,都是在加工流程中被加工、被消费的组件,就像流水线上被加工的物料。

2)       加工设备组:ResourceLoader、BeanDefinitionReader、BeanFactoryPostProcess、InstantiationStrategy以及BeanWrapper等组件像是流水线上不同环节的加工设备,对物料组件进行加工。

3,    组件的用途

组件
用途
BeanDefinition
Spring通过BeanDefinition将配置文件中的<bean>配置信息转换成容器的内部表示,并将这些BeanDefinition注册到BeanDefinitionRegistry中。
InstantiationStrategy
负责实例化Bean,只相当于new操作,不会参与到Bean属性的设置工作
BeanWrapper
对Bean的属性进行填充

属性编辑器
将各类的字符串转换为对应的Int、double等类型

4,监听器

   监听器是通过容器发送的广播事件,才能顺利监听到事件源的。所以在监听器方面包括三个部分:事件监听器、事件源、广播器。在主控容器的协助下,三者实现监听过程。

4.1 事件

 事件源包括两个子类:

1)       ApplicationContextEvent:容器事件,拥有四个子类分别表示容器的启动、刷新、停止以及关闭的事件。

2)       RequestHandleEvent:这是一个Web应用相关的事件,当一个HTTP请求被处理后,产生该事件。只有在web.xml中定义了DispatcherServlet时才会产生该事件,拥有两个子类,分别代表Servlet以及Portlet的请求事件。

4.2 事件监听器

  Spring只有一个事件监听器接口ApplicationListener,ApplicationListener接口只定义了一个方法:onApplicationEvent(E event),该方法接受ApplicationEvent事件对象,在该方法中编写事件响应处理逻辑。SmartApplicationListener是Spring3.0新增的。

4.3事件广播器

当发生容器事件的时候,容器主控程序将调用事件广播器将事件通知给注册表中的事件监听器,监听器分别对事件进行响应。Spring为事件广播器定义了接口,并提供了实现类。

4.4 监听的流程

1) 实现了ApplicationContextAware接口的拥有发布事件的类,需要在Spring配置文件中进行Bean的配置,然后在再启动容器的时候,调用这个Bean的对象发布事件的方法。发布事件完成。

2) 当Spring容器启动时,会把事件监听器自动注册到注册表中。

3) Spring容器发现发生容器事件,调用事件广播器通知给注册表中的事件监听器。

4)事件监听器对于监听到的事件,做出相应的处理。

 

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring bean