Spring基础14——Bean的生命周期

1.IOC容器中的Bean的生命周期方法

SpringIOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行定制的任务。SpringIOC容器对Bean的生命周期进行管理的过程:

  1)通过构造器工厂方法创建Bean实例

  2)为bean的属性设置值和对其他bean的引用

  3)调用Bean的初始化方法

  4)Bean可以使用了

  5)当容器关闭时,调用Bean的销毁方法

2.验证bean的生命周期

我们可以在Spring的配置文件中声明init-method属性和destory-method属性为Bean指定初始化和销毁方法。

首先我们先创建一个Car类:

 1 public class Car {
 2     public Car() {
 3         System.out.println("Car‘s Constructor");
 4     }
 5     private String brand;
 6
 7     public void setBrand(String brand) {
 8         System.out.println("setBrand...");
 9         this.brand = brand;
10     }
11     //初始化方法
12     public void init() {
13         System.out.println("init....");
14     }
15     //销毁方法
16     public void destory() {
17         System.out.println("destory.....");
18     }
19
20     @Override
21     public String toString() {
22         return "Car{" +
23                 "brand=‘" + brand + ‘\‘‘ +
24                 ‘}‘;
25     }
26 }

Spring配置文件

1 <bean id="car" class="com.wzy.cycle.Car" init-method="init" destroy-method="destory">
2     <property name="brand" value="Audi"/>
3 </bean>

编写一个测试类对id为car的bean进行获取

1 public class Main {
2     public static void main(String[] args) {
3         ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans-cycle.xml");
4         Car car = (Car) ctx.getBean("car");
5         System.out.println(car);
6         ctx.close();
7     }
8 }

输出结果:

3.创建Bean后置处理器

Bean后置处理器允许在调用初始化方法前后对Bean进行额外的处理Bean后置处理器对IOC容器里所有Bean实例逐一处理,而非单一实例。其典型的应用就是:检查Bean属性的正确性或根据特定的标准更改bean的属性。对Bean后置处理器而言,需要实现BeanPostProcessor接口,在初始化方法被调用前后,Spring将每个Bean实例分别传递给上述接口的以下两个方法。

在BeanPostProcessor接口中包含两个方法,postProcessBeforeInitialization()和postProcessAfterInitialization():

1)postProcessBeforeInitialization(Object bean, String beanName):init-method之前被调用

2)postProcessAfterInitialization(Object bean, String beanName):init-method之后被调用

创建Bean后置处理器,首先先创建一个类并实现BeanPostProcessor接口,并实现上面两个方法:

 1 public class MyBeanPostProcessor implements BeanPostProcessor{
 2     @Nullable
 3     public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
 4         System.out.println("postProcessBeforeInitialization " + bean + ", " + beanName);
 5         if ("car".equals(beanName)) {
 6             //do sth
 7         }
 8         return bean;
 9     }
10
11     @Nullable
12     public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
13         System.out.println("postProcessBeforeInitialization " + bean + ", " + beanName);
14         Car car = new Car();
15         car.setBrand("FuTe");
16         return car;
17     }
18 }

在spring.xml配置bean后置处理器:

 1 <!--实现BeanProcessor接口,并具体提供
 2     postProcessBeforeInitialization(Object bean, String beanName):init-method之前被调用
 3     postProcessAfterInitialization(Object bean, String beanName):init-method之后被调用
 4     的实现
 5     bean:bean本身
 6     beanName:IOC容器配置的bean的名字
 7     返回值:是实际上返回给用户的那个bean,注意:可以在以上两个方法中修改返回的bean,甚至甚至返回一个新的bean
 8 -->
 9 <!--配置bean的后置处理器:不需要配置id,IOC容器会自动识别是一个BeanPostProcessor-->
10 <bean id="myBeanPostProcessor" class="com.wzy.cycle.MyBeanPostProcessor"/>

再次运行测试类,查看输出结果:

原文地址:https://www.cnblogs.com/fengyun2019/p/10840192.html

时间: 2024-09-30 06:55:06

Spring基础14——Bean的生命周期的相关文章

Spring管理的Bean的生命周期

bean的初始化时机 前面讲解了Spring容器管理的bean的作用域.接着我们就要思考一个问题:bean到底是在什么时候才进行实例化的呢?我们以这个问题为引子来展开本文的说明. bean对象无外乎是在以下两个时刻进行实例化的: 调用getBean()方法时. Spring容器启动时. 那么bean对象到底是在哪个时刻进行实例化的,这与Bean的作用域有着某种联系.我们以配置Spring管理的bean的作用域的案例为基础进行深入探讨.为了能够清楚地看到bean对象的实例化,我们需要修改Perso

Spring容器中Bean的生命周期

日出日落,春去秋来,花随流水,北雁南飞,世间万物皆有生死轮回.从调用XML中的Bean配置信息,到应用到具体实例中,再到销毁,Bean也有属于它的生命周期. 人类大脑对图像的认知能力永远高于文字,因此,闲言少叙,书归正传,上图先: 步骤很多,切莫惊慌,我们可以把上面的步骤归纳如下: 1-2:创建实例: 现在假设spring就是个容器,而配置文件中配置的bean属性才是我们真正需要的东西.创建实例就是说,我把配置文件中的bean信息取出来化作一个真正的bean并放到容器中. 3-4:注入依赖关系:

spring中的bean的生命周期

bean的生命周期:bean的创建 —— 初始化 ——销毁的过程 容器管理bean的生命周期,我们可以自定义初始化和销毁方法,容器在bean进行到当前生命周期就会调用我们的方法 在xml配置文件中是在bean的标签内使用init-method和destroy-method <bean id="person" class="com.springbean.Person" init-method="" destroy-method="&

spring ApplicationContext中Bean的生命周期

AbstractApplicationContext Spring的AbstractApplicationContext是ApplicationContext的抽象实现类,该抽象类的refresh方法定义了spring容器在加载配置文件后的各项处理过程 public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { prepareRe

Spring 框架基础(02):Bean的生命周期,作用域,装配总结

本文源码:GitHub·点这里 || GitEE·点这里 一.装配方式 Bean的概念:Spring框架管理的应用程序中,由Spring容器负责创建,装配,设置属性,进而管理整个生命周期的对象,称为Bean对象. 1.XML格式装配 Spring最传统的Bean的管理方式. 配置方式 <bean id="userInfo" class="com.spring.mvc.entity.UserInfo"> <property name="na

深入剖析Spring(三)——Bean的生命周期

对于普通的Java对象,当new的时候创建对象,当它没有任何引用的时候被垃圾回收机制回收.而由Spring IoC容器托管的对象,它们的生命周期完全由容器控制.Spring中每个Bean的生命周期如下: 1. 实例化Bean 对于BeanFactory容器,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用createBean进行实例化. 对于ApplicationContext容器,当容器启动结束后,便实例化所有的bean. 容器通

Spring Bean的生命周期(非常详细)

Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring容器.这里,我们讲的也是 ApplicationContext中Bean的生命周期.而实际上BeanFactory也是差不多的,只不过处理器需要手动注册. 转载请注明地址 http://www.cnblogs.com/zrtqsk/p/3735273.html,谢谢. 一.生命周期流程图: Spri

Spring的Bean的生命周期以及Bean的后置处理器

Bean的生命周期: Spring IOC 容器可以管理 Bean 的生命周期, Spring 允许在 Bean 生命周期的特定点执行定制的任务. Spring IOC 容器对 Bean 的生命周期进行管理的过程: 1通过构造器或工厂方法创建 Bean 实例 2为 Bean 的属性设置值和对其他 Bean 的引用 3调用 Bean 的初始化方法(可以人为指定,利用Bean标签的inti-method属性指定初始化方法,不指定就默认忽略这步骤) Bean 可以使用了 4当容器关闭时, 调用 Bea

Spring Bean的生命周期(非常详细)(转载)

Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring容器.这里,我们讲的也是 ApplicationContext中Bean的生命周期.而实际上BeanFactory也是差不多的,只不过处理器需要手动注册. 转载请注明地址 http://www.cnblogs.com/zrtqsk/p/3735273.html,谢谢. 一.生命周期流程图: Spri