注意,这个时间只能应用于使用了Spring的DispatcherServlet的web应用。 LifeCycle 1. InitializingBean/init-method 实现org.springframework.beans.factory.InitializingBean接口允许一个bean在他的所有必需的属性被BeanFactory设置后,来执行初始化的工作。 当然可以使用init-method来取代实现这个接口,以让应用不与spring产生耦合。 如果一个bean既实现了InitializingBean,又指定了init-method,则spring会先调InitializingBean的方法,在调init-method指定的方法。 2. DisposableBean/destroy-method 实现org.springframework.beans.factory.DisposableBean接口允许一个bean,可以在包含他的BeanFactory销毁的时候得到一个回调。 注意:BeanFactory对bean的管理默认是单实例的,如果bean不是单示例的,spring就不能管理他的生命周期。 3. BeanFactoryAware 对于实现了org.springframework.beans.factory.BeanFactoryAware接口的类,当它被BeanFactory创建后,它会拥有一个指向创建他的BeanFactory的引用。 4. BeanNameAware 如果一个bean实现了org.springframework.beans.factory.BeanNameAware接口,并且被部署到一个BeanFactory中,那么BeanFactory就会通过这个接口来调用bean,以便通知这个bean他被部署的id.这个回调发生在普通的 bean属性设置之后,在初始化回调之前,比如InitializingBean的afterProperteis方法(或者自定义的init- method)。 Bean的生命周期如下 1. Bean的构造 2. 调用setXXX()方法设置Bean的属性 3. 调用BeanNameAware的setBeanName(); 4. 调用BeanFactoryAware的setBeanFactory()方法 5. 调用BeanPostProcessor的postProcessBeforeInitialization()方法 6. 调用InitializingBean的afterPropertiesSet()方法 7. 调用自定义的初始化方法 8. 调用BeanPostProcessor类的postProcessAfterInitialization()方法 9. 调用DisposableBean的destroy()方法 10. 调用自定义的销毁方法。 扩展Spring的Ioc框架 Spring框架的IoC组件被设计为可扩展的。通常应用开发者并不需要子类化各个BeanFactory或ApplicationContext的实现类,通过插入特定接入接口的实现,Spring的IoC容器就可以不受限制的进行扩展。 BeanPostProcessor:在创建bean之后调用 BeanFactoryPostProcessors:在创建bean之前调用 1. 如果想在spring容器完成一个bean的实例化后,再对他进行初始化之前或之后执行一些自定义的逻辑,可以插入一个或多个BeanPostProcessor的实例。 2. org.springframework.beans.factory.config.BeanPostProcessor接口包含了两个回调方法。当一个类作为容器的后置处理器(post-processor)被注册后,对于由容器创建的每个bean实例,在任一个初始化方法(例如 afterProperties和利用init-method声明的方法)调用前后后置处理器会从容器中分别获取一个回调。后置处理器可以随意对这个 bean实例执行他所期望的动作,也包括完全忽略这个回调。 3.BeanFactory和ApplicationContext对待bean后置处理器稍有不同。 ApplicationContext会自动检测任何提供给他的在配置元数据中定义实现了BeanPostProcessor接口的bean, 并把它们注册为后置处理器,然后在容器创建bean的适当时候调用它。部署一个后置处理器同部署其他的bean并没有什么区别,无需其他的动作。而另一方面,当使用BeanFactory的时候,bea