对bean生命周期的认识

来源:互联网 发布:cda数据分析师怎么样 编辑:程序博客网 时间:2024/06/06 13:20

bean的生命周期

亲!我们首先来看一看一个简单的applicatin.xml配置文件

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:context="http://www.springframework.org/schema/context"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">    <bean id="helloworld" class="com.xxx.HelloWorld">      <property name="propName">value</property>      <property name="propName">value</property>      <property name="propName">value</property>    </bean>    <bean id="hello" class="com.xxx.Hello">      <property name="propName">value</property>      <property name="propName">value</property>      <property name="propName">value</property>    </bean></beans>

bean生命从此开始:
实例化([class])—>
填充属性()—>
调用BeanNameAware的setBeanName()方法([id])—>
调用BeanFactoryAware的setBeanFactory()方法()—>
调用ApplicationContextAware的setApplicationContext()方法(application.xml文件)—>
调用BeanPostProcessor的预初始化方法(对bean进行管理)—>
调用InitializaingBean的afterPropertiesSet()方法—>
调用自定的初始化方法—>
调用BeanPostProcessor的初始化方法—>
使用bean

bean的生命结束:
调用DispossableBean的destroy()的方法—>
调用自定义的销毁方法
game over!

好的,下面我们来详细解释一下bean的各生命阶段。
1、Spring对bean进行实例化,其原理是通过反射实例化bean的。对的,受精已经开始了。
2、Spring将值和bean的引用注入到bean对应的属性中。已经怀胎十月了,很兴奋吧。
3、如果bean实现了BeanNameAware接口,Spring将bean的ID的传递给setBeanName()。总得为即将出生的宝宝取个名字吧。
4、如果bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory(),将BeanFactory容器传入。宝宝长个子了总得给他提供一个活动空间吧。
5、如果bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()方法。宝宝长大了良好的生活环境不可少吧。
6、如果bean实现了BeanPostProcessor接口,Spring将调用postProcessBeforeInitialization()方法。在宝宝上学之前有必要做一些准备吧。
7、如果beean实现了InitialzingBean接口,bean将调用他们的afterPropertiesSet()方法,当然自定义的初始化方法也会被调用。宝宝上学之后就有了学生身份和社会人身份了吧,自己给自己的标签也是可以有的。
8、如果bean实现了BeanPostProcessor接口,Spring将调用postProcessorAfterInitialization()方法。宝宝有了学生身份和社会人身份之后就可以参与相应的活动和生活了。
9、此时的bean已经准备就绪了,可以被应用程序使用了。宝宝现在长大成人有能力参与到社会建设中去了。
10、如果bean实现了DisposableBean接口,Spring将调用它的destroy()接口方法(宝宝自然死亡)也会调用自定义的detroy-method声明的方法(宝宝意外死亡)。现在不能用宝宝这个词来形容了吧。

有木有感觉生命如此短暂啊(伤心),好吧,既然改变不了上帝给我们的期限那我们就改变自己,把每一秒钟都过充实过的有意义,不枉费来到这个世界。骚年,奋斗吧!骚年,努力吧,一切的付出都是为了让自己成为以后想成为地那一类人。

0 0