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

原创 2007年09月28日 17:02:00
   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在前面已经说过。
      注入的方式有两种,一种是设值注入,另一种是构造注入。
 

Spring框架下类的初始化顺序

序言   之前的已经分析过在不使用框架的情况下,类中各个部分的初始化或执行顺序,后来我在开发中使用了Spring,发现初始化顺序与之前的稍有不同,特别是其初始化以xml配置文档作为驱动,xml中先定...

Spring3中@Autowired注入的顺序

一、问题 问题;Spring3中在Bean中多个属性,多个方法@Autowired的顺序是怎样执行的? Demo @Component public class MyBean { @Val...
  • yangjun2
  • yangjun2
  • 2012年05月25日 19:00
  • 14367

Spring bean 加载执行顺序

问题来源: 有一个bean为A,一个bean为B。想要A在容器实例化的时候的一个属性name赋值为B的一个方法funB的返回值。 如果只是在A里单纯的写着: private B b;...

springmvc的执行流程详解

1.什么是MVC MVC是Model View Controller的缩写,它是一个设计模式  2.springmvc执行流程详细介绍   第一步:发起请求到前端控制器(...

Spring基本执行过程解析

1.当使用 ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring-config.xml");...

spring 所有bean 加载顺序

问题来源: 有一个bean为A,一个bean为B。想要A在容器实例化的时候的一个属性name赋值为B的一个方法funB的返回值。 如果只是在A里单纯的写着: private B b;...
  • zshake
  • zshake
  • 2014年12月05日 11:42
  • 10750

【Spring启动过程分析】(1)启动流程简介

1、 spring简介 spring的最基本的功能就是创建对象及管理这些对象之间的依赖关系,实现低耦合、高内聚。还提供像通用日志记录、性能统计、安全控制、异常处理等面向切面的能力,还能帮我们管理...

spring加载顺序

因为项目需求,要实现自定义注解然后通过spring扫描注解并放入缓存,我想到了BeanDefinitionRegistryPostProcessor接口,通过实现 BeanDefinitionRegi...

Spring学习笔记(二)后处理器与AOP

Spring 后处理器和AOP
  • z55887
  • z55887
  • 2016年09月27日 21:37
  • 717

Spring依赖配置与自动装配的先后顺序问题

学习spring时,对其功能过程进行的测试验证。了解其大致过程。
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:粗谈Spring——从执行顺序来看说Spring
举报原因:
原因补充:

(最多只允许输入30个字)