• Spring--bean的生命周期


    IOC容器中bean的生命周期方法
    -Spring IOC容器可以管理bean的生命周期,Spring允许在bean的生命周期的特定点执行定制的任务
    -Spring IOC容器对bean的生命周期进行管理的过程:

    • -通过构造器或工厂方法创建bean实例
    • -为bean的属性设置值和对其他bean的引用
    • -调用bean的初始化方法
    • -bean可以使用了
    • -当容器关闭时,调用bean的销毁方法

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

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

    添加bean后置处理器后bean的生命周期

    • -通过构造器或工厂方法创建bean实例
    • -为bean的属性设置值和对其他bean的引用
    • -将bean实例传递给bean前置处理器的postProcessBeforeInitialization方法
    • -调用bean的初始化方法
    • -将bean实例传递给bean后置处理器的postProcessAfterInitialization方法
    • -bean可以使用了
    • -当容器关闭时,调用bean的销毁方法

    bean的配置文件:
     

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
     5 
     6     <bean id="car" class="com.yl.cycle.Car" 
     7         init-method="init" destroy-method="destory">
     8         <property name="brand" value="Audi"></property>
     9     </bean>
    10     
    11     
    12     <!-- 实现BeanPostProcessor接口,并且提供
    13         Object postProcessBeforeInitialization(Object bean, String beanName)   init-method方法之前调用
    14         Object postProcessAfterInitialization(Object bean, String beanName)    init-method方法之后调用
    15         的实现
    16         bean:bean实力本身
    17         beanName:IOC容器中配置的bean的名字
    18         返回值是实际上返回给用户的那个bean,注意:可以在以上两个方法中修改返回的bean,设置返回一个新的bean
    19     -->
    20     <!-- 配置bean的后置处理器 。 不需要配置id,IOC容器自动识别是一个BeanPostProcessor-->
    21     <bean class="com.yl.cycle.MyBeanPostProcessor"></bean>
    22     
    23 </beans>

    bean的后置处理器:

     1 package com.yl.cycle;
     2 
     3 import org.springframework.beans.BeansException;
     4 import org.springframework.beans.factory.config.BeanPostProcessor;
     5 
     6 public class MyBeanPostProcessor implements BeanPostProcessor {
     7 
     8     @Override
     9     public Object postProcessAfterInitialization(Object bean, String beanName)
    10             throws BeansException {
    11         System.out.println("postProcessAfterInitialization: " + bean + ", " + beanName);
    12         
    13         Car car = new Car();
    14         car.setBrand("Ford");
    15         
    16         return car;
    17     }
    18 
    19     @Override
    20     public Object postProcessBeforeInitialization(Object bean, String beanName)
    21             throws BeansException {
    22         System.out.println("postProcessBeforeInitialization: " + bean + ", " + beanName);
    23         
    24         if ("car".equals(beanName)) {
    25             
    26         }
    27         
    28         
    29         return bean;
    30     }
    31 
    32 }

    测试类:

     1 package com.yl.cycle;
     2 
     3 import org.springframework.context.ApplicationContext;
     4 import org.springframework.context.support.AbstractApplicationContext;
     5 import org.springframework.context.support.ClassPathXmlApplicationContext;
     6 
     7 public class CycleMain {
     8     public static void main(String[] args) {
     9         ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-cycle.xml");
    10         
    11         Car car = (Car)ctx.getBean("car");
    12         System.out.println(car);
    13         
    14         //关闭容器
    15         ((AbstractApplicationContext) ctx).close();
    16     }
    17 }





  • 相关阅读:
    (转)Esri微博地址收录
    使用liquibasemavenplugin实现持续数据库集成
    CenOS系统中安装Tomcat7并设置为自启动服务
    Androidx86虚拟机安装配置全攻略
    jdk8根据某一属性去重方法 Collectors.collectingAndThen
    [转]恶心的C语言strtok函数
    人生七日忠告 人生征途须记
    VTK中二维Delaunay三角剖分
    Python编程题41原地反转字符串
    Python编程题42除自身以外元素的乘积
  • 原文地址:https://www.cnblogs.com/dreamfree/p/4088280.html
Copyright © 2020-2023  润新知