🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
Spring 容器可以管理 singleton 作用域 Bean 的生命周期,在此作用域下,Spring 能够精确地知道该 Bean 何时被创建,何时初始化完成,以及何时被销毁。 <br/> 对于 prototype 作用域的 Bean,Spring 只负责创建,当容器创建了 Bean 的实例后,Bean 的实例就交给客户端代码管理,Spring 容器将不再跟踪其生命周期。 <br/> **1. bean的生命周期有7步** (1)通过构造器创建 bean 实例(无参数构造)。 (2)为 bean 的属性设置值和对其他 bean 引用(调用 set 方法)。 (3)调用 bean 的初始化方法之前。 (4)调用 bean 的初始化方法(需要进行配置初始化的方法)。 (5)调用 bean 的初始化方法之后。 (6)bean 可以使用了(对象获取到了)。 (7)当容器关闭时候,调用 bean 的销毁的方法(需要进行配置销毁的方法)。 <br/> **2. 演示bean生命周期** (1)待注入到IOC容器的类。 ```java public class Orders { public Orders() { System.out.println("第一步 执行无参数构造创建 bean 实例"); } private String oname; public void setOname(String oname) { this.oname = oname; System.out.println("第二步 调用 set 方法设置属性值"); } //创建执行的初始化的方法 public void initMethod() { System.out.println("第四步 执行初始化的方法"); } //创建执行的销毁的方法 public void destroyMethod() { System.out.println("第七步 执行销毁的方法"); } } ``` ```java /** * BeanPostProcessor是bean的后置处理器 */ public class CustomBeanPost implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println("第三步 在初始化之前执行的方法"); return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println("第五步 在初始化之后执行的方法"); return bean; } } ``` (2)注入IOC容器。 *`ApplicationContext-life.xml`* ```xml <bean id="customBeanPost" class="com.learn.spring.life.CustomBeanPost "></bean> <bean id="orders" class="com.learn.spring.life.Orders" init-method="initMethod" destroy-method="destroyMethod"> <property name="oname" value="手机"></property> </bean> ``` (3)测试。 ```java @Test public void testLife() { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext-life.xml"); Orders orders = context.getBean("orders", Orders.class); System.out.println("第六步 获取创建 bean 实例对象"); //手动让 bean 实例销毁 context.close(); } ``` (4)程序执行步骤如下。 ``` 第一步 执行无参数构造创建 bean 实例 第二步 调用 set 方法设置属性值 第三步 在初始化之前执行的方法 第四步 执行初始化的方法 第五步 在初始化之后执行的方法 第六步 获取创建 bean 实例对象 第七步 执行销毁的方法 ```