1.IOC容器中的Bean的生命周期方法
SpringIOC容器对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后置处理器对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"/>
再次运行测试类,查看输出结果:
4.添加Bean的后置处理器后Bean的生命周期
1)通过构造器或工厂方法创建bean实例
2)为bean的属性设置值和对其他bean的引用
3)将Bean实例传递给Bean后置处理器
4)执行postProcessBeforeInitialization方法
5)调用bean的init方法
6)将Bean实例传递给Bean后置处理器
7)执行postProcessAfterInitialization方法
8)bean可以使用了
9)当容器关闭了调用bean销毁方法
来源:https://www.cnblogs.com/fengyun2019/p/10840192.html