zoukankan      html  css  js  c++  java
  • 10.Spring Bean的生命周期

    Spring IOC容器可以管理Bean的生命周期,允许在Bean声明周期的特定点执行定制的任务。

    Spring IOC容器对Bean的生命周期进行管理的过程。

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

    2.位Bean的属性设置值和对其他Bean的引用

    3.调用Bean的初始化方法

    4.使用Bean

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

    在Bean的声明里设置init-method和destory-method属性,为Bean指定初始化和销毁方法。

    Spring IOC容器提供后置处理器在对IOC容器的所有Bean实例逐一处理,而非单一实例,可以用来检查Bean属性的正确性或根据特定的标准更改Bean的属性。

    对与Bean的后置处理器,需要实现BeanPostProcessor接口,在初始化方法前后,Spring将把每个Bean实例分别传递给接口的两个方法postProcessBeforeInitialization和postProcessAfterInitialization。

    如果实现了Bean的后置处理器接口。

    Bean的生命周期过程则是:

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

    2.位Bean的属性设置值和对其他Bean的引用

    3.将Bean实例传递给postProcessBeforeInitialization方法,并调用

    4.调用Bean的初始化方法

    5.将Bean实例传递给postProcessAfterInitialization方法,并调用

    6.使用Bean

    7.当容器关闭时,调用Bean的销毁方法

    public class Car {//bean类
        public Car() {
            System.out.println("com.cn.Car's Constructor");
        }
    
        private  String brand;
    
        public void setBrand(String brand) {
            System.out.println("setBrand");
            this.brand = brand;
        }
    
        /**
         * 初始化方法
         */
        public void init() {
            System.out.println("init");
        }
    
        /**
         * 销毁方法
         */
        public void destory() {
            System.out.println("destroy");
        }
    }
    public class MyBeanPostProcessor implements BeanPostProcessor{//后置处理器的实现类
        @Override
        public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
            System.out.println("postProcessBeforeInitialization: " + beanName);
            return bean;
        }
    
        @Override
        public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            System.out.println("postProcessAfterInitialization: " + beanName);
            return bean;
        }
    }
    <!-- 配置文件 -->
    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="car" class="com.cn.Car" init-method="init" destroy-method="destory"> <property name="brand" value="test"></property> </bean> <!-- bean的后置处理器不需要配置id,IOC容器会自动识别后置处理器--> <bean class="com.cn.MyBeanPostProcessor"></bean> </beans>
    public class Main {
        public static void main(String[] args) {
    //测试代码 ClassPathXmlApplicationContext ctx
    = new ClassPathXmlApplicationContext("10.xml"); Car car = (Car) ctx.getBean("car"); System.out.println(car); ctx.close(); } }
    //测试结果
    com.cn.Car's Constructor setBrand postProcessBeforeInitialization: car init postProcessAfterInitialization: car com.cn.Car@1615f43d destroy
  • 相关阅读:
    面向对象
    PIL库学习及运用
    Jieba库使用和好玩的词云
    Python汉诺塔问题
    用python计算圆周率PI
    使用python画一只佩奇
    面向对象与正则表达式的学习
    美白,磨皮,搞笑图片处理
    tuetle制作汉诺塔
    python圆周率的计算及进度条提示
  • 原文地址:https://www.cnblogs.com/jecyhw/p/4587428.html
Copyright © 2011-2022 走看看