• [原创]java WEB学习笔记101:Spring学习---Spring Bean配置:IOC容器中bean的声明周期,Bean 后置处理器


    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用

    内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。

    本人互联网技术爱好者,互联网技术发烧友

    微博:伊直都在0221

    QQ:951226918

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

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

      Spring IOC 容器可以管理 Bean 的生命周期, Spring 允许在 Bean 生命周期的特定点执行定制的任务.在 Bean 的声明里设置 init-method destroy-method 属性, 为 Bean 指定初始化销毁方法.

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

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

      3)调用 Bean 的初始化方法  

      4)Bean 可以使用了  

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

     1 package com.jason.spring.cycle;
     2 
     3 public class Car {
     4 
     5     public Car() {
     6         System.out.println("Car's Constructor ... ");
     7     }
     8 
     9     private String brand;
    10 
    11     public void setBrand(String brand) {
    12         this.brand = brand;
    13     }
    14 
    15     public void init() {
    16         System.out.println("init ...");
    17     }
    18     
    19     public void destroy(){
    20         System.out.println("destroy ..."); 
    21     }
    22 
    23     @Override
    24     public String toString() {
    25         return "Car [brand=" + brand + "]";
    26     }
    27     
    28     
    29 
    30 }
    Car
     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.jason.spring.cycle.Car" init-method="init" destroy-method="destroy"> 
     7         
     8     </bean>
     9     
    10 
    11 </beans>
    bean-cycle.xml
     1 package com.jason.spring.cycle;
     2 
     3 import org.springframework.context.ApplicationContext;
     4 import org.springframework.context.support.ClassPathXmlApplicationContext;
     5 
     6 public class Main {
     7     
     8     public static void main(String[] args) {
     9         
    10         ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans-cycle.xml");
    11         Car car = (Car) ctx.getBean("car");
    12         System.out.println(car);
    13         
    14         //关闭IOC
    15         ctx.close();
    16     }
    17 
    18 }
    Main

    2.创建 Bean 后置处理器

      1)Bean 后置处理器允许在调用初始化方法前后对 Bean 进行额外的处理.

      2)Bean 后置处理器对 IOC 容器里的所有 Bean 实例逐一处理, 而非单一实例. 其典型应用是: 检查 Bean 属性的正确性或根据特定的标准更改 Bean 的属性.

      3)对Bean 后置处理器而言, 需要实现  BeanPostProcesser    接口. 在初始化方法被调用前后, Spring 将把每个 Bean 实例分别传递给上述接口的以下两个方法:

      

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

        

      6)实现方式

        ① 实现 BeanPostProcessor 接口:postProcessAfterInitialization  ,   postProcessBeforeInitialization

        ② 配置bean:

    1 <!-- 配置bean 的后置处理器 :不需要配置id,IOC 容器会自动识别一个 BeanPostProcessor-->
    2 <bean class="com.jason.spring.cycle.MyBeanPostProcesser"></bean>
     1 package com.jason.spring.cycle;
     2 
     3 public class Car {
     4 
     5     public Car() {
     6         System.out.println("Car's Constructor ... ");
     7     }
     8 
     9     private String brand;
    10 
    11     public void setBrand(String brand) {
    12         this.brand = brand;
    13     }
    14 
    15     public void init() {
    16         System.out.println("init ...");
    17     }
    18     
    19     public void destroy(){
    20         System.out.println("destroy ..."); 
    21     }
    22 
    23     @Override
    24     public String toString() {
    25         return "Car [brand=" + brand + "]";
    26     }
    27     
    28     
    29 
    30 }
    Car
     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.jason.spring.cycle.Car" init-method="init" destroy-method="destroy"> </bean>
     7     
     8     <!-- 配置bean 的后置处理器 :不需要配置id,IOC 容器会自动识别一个 BeanPostProcessor-->
     9     <bean class="com.jason.spring.cycle.MyBeanPostProcesser"></bean>
    10 
    11 </beans>
    beans-cycle.xml
     1 package com.jason.spring.cycle;
     2 
     3 import org.springframework.beans.BeansException;
     4 import org.springframework.beans.factory.config.BeanPostProcessor;
     5 
     6 public class MyBeanPostProcesser implements BeanPostProcessor {
     7 
     8     @Override
     9     public Object postProcessAfterInitialization(Object bean, String beanName)
    10             throws BeansException {
    11         
    12         
    13         /**
    14          * bean:bean实例
    15          * beanName:IOC 容器配置的bean 名字
    16          * 返回值:实际是返回给用户的bean,即,经过处理的bean
    17          */
    18         // BeanPostProcessor 处理所有的bean, 所有需要通过判断,确定自己要处理的那个bean    
    19         if("car".equals(beanName)){
    20             //...
    21         }
    22         System.out.println("postProcessAfterInitialization" + bean + "," + beanName);
    23         return bean;
    24     }
    25 
    26     @Override
    27     public Object postProcessBeforeInitialization(Object bean, String beanName)
    28             throws BeansException {
    29         System.out.println("postProcessBeforeInitialization" + bean + "," + beanName);
    30         return bean;
    31     }
    32 
    33 }
    MyBeanPostProcesser
     1 package com.jason.spring.cycle;
     2 
     3 import org.springframework.context.ApplicationContext;
     4 import org.springframework.context.support.ClassPathXmlApplicationContext;
     5 
     6 public class Main {
     7     
     8     public static void main(String[] args) {
     9         
    10         ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans-cycle.xml");
    11         Car car = (Car) ctx.getBean("car");
    12         System.out.println(car);
    13         
    14         //关闭IOC
    15         ctx.close();
    16     }
    17 
    18 }
    Main
  • 相关阅读:
    SQL Server中使用convert进行日期转换
    杂记
    sqlserver表分区与调优与行列转换
    HttpModule的认识与深入理解及MVC运行机制
    再谈委托
    ASP.NET forms凭据设置和跳转的几种方法
    IOS学习网址
    Activator.CreateInstance 方法 (Type) 的用法
    update多表更新的2种方式
    SQL自定义函数split分隔字符串
  • 原文地址:https://www.cnblogs.com/jasonHome/p/5967700.html
Copyright © 2020-2023  润新知