关闭

粗谈Spring——从执行顺序来看说Spring

标签: springbeanobjectexceptionstrutsstring
4515人阅读 评论(0) 收藏 举报
   1.Spring的加载(实例化)
      如果不与Struts整合的话,Spring的加载是在Web程序的web.xml中配置的,在web.xml 中有两种选择,一种是ContextLoaderListener,另一种是ContextLoaderServlet。
      如果与Struts进行整合,则Spring的加载是在struts-config.xml中配置的。
   2.容器后处理器
      在容器实例化之后可以对Spring容器进行一些操作,这个通过实现接口BeanFactoryPostProcessor接口来实现,该接口有一个方法void postProcessorBeanFactory(ConfigurableListableBeanFactory beanFactory)。这个接口有两个很有用的实现类,是Spring已经实现好的,它们是PropertyPlaceholderConfigurer(属性占位符配置器)和PropertyOverrideConfigurer(另一种属性占位符配置器)。
   3.与Spring容器的交互
      对容器的处理操作结束以后,我们就能和Spring容器进行交互了,我们可以实现FactoryBean,FactoryBeanAware接口等方法获取BeanFactory实例,然后用之。
   4.配置bean和依赖关系
      这包括配置依赖,注入属性值,注入field值,注入方法返回值,bean的继承。这些配置的过程中还包括配置强制初始化bean(depends-on),自动装配(autowire),依赖检查(dependency-check),这三项都是bean的属性(不是子元素)。
   5.对容器中的bean实例化的管理——bean后处理器
      bean后处理器必须实现BeanPostProcessor接口,该接口中有两个方法,一个是Object postProcessBeforeInitialization(Object bean,String name) throws BeansException 和 Object postProcessAfterInitialization(Object bean,String name) throws BeansException,前一个方法是在实例化之前对该bean进行处理,后一个方法是在实例化之后对该bean进行处理。
   6.对bean生命周期的管理
      对bean生命周期的管理有两个时机:一,在注入依赖关系之后;二,在即将销毁bean之前。
      在注入依赖关系之后管理有两种方式:一,使用init-method属性;二,InitialingBean接口,它只有一个void afterPropertiesSet() throws Exception方法。
      在bean销毁之前管理时也有两种方式:一,使用destroy-method属性;二,DisposableBean接口,它只有一个void destroy() throws Exception方法。
   这里要说明的是,如果同时配了属性,也实现了方法。则先执行接口的方法,再执行配置的属性指定的方法。
   如果既用了bean后处理器,有对bean的生命周期进行管理,则执行的顺序是:Object postProcessBeforeInitialization(Object bean,String name) throws BeansException,void afterPropertiesSet() throws Exception,init-method,Object postProcessAfterInitialization(Object bean,String name) throws BeansException。
   7.创建bean实例
      创建bean实例有三种方法:
      1.调用构造器创建一个bean实例。
     2.BeanFactory调用某个类的静态工厂方法创建bean。
     3.BeanFactory调用实例工厂方法创建bean。
   8.依赖注入
      注入的顺序是先实例化本bean(它需要容器向它注入其它的bean),在实例化用来向本bean注入的bean,然后执行注入。当然,这种顺序是可以改变的,可以用强制实例化bean来改变这种顺序。强制实例化bean在前面已经说过。
      注入的方式有两种,一种是设值注入,另一种是构造注入。
 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:80713次
    • 积分:950
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:20篇
    • 译文:0篇
    • 评论:14条
    最新评论