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

本文内容纲要:Spring的Bean的生命周期以及Bean的后置处理器

Bean的生命周期:

Spring IOC 容器可以管理 Bean 的生命周期,

Spring 允许在 Bean 生命周期的特定点执行定制的任务.

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

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

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

      3调用 Bean 的初始化方法(可以人为指定,利用Bean标签的inti-method属性指定初始化方法,不指定就默认忽略这步骤) Bean 可以使用了

      4当容器关闭时, 调用 Bean 的销毁方法(可以人为指定,利用Bean标签的destroy-method属性指定销毁方法,不指定就默认忽略这步骤 )

代码示例:

Bean实例代码:

package com.jeremy.spring.cycle;

public class person {

private String Name;

public void setName(String name) {

Name = name;

System.out.println("Setter............");

}

public person() {

System.out.println("person constructor.......");

}

public void init(){

System.out.println("init......");

}

public void destory(){

System.out.println("desdtory......");

}

@Override

public String toString() {

return "person [Name=" + Name + "]";

}

配置了init-method和destroy-method后

测试代码:

@Test

public void testNoProcessorCycle(){

ConfigurableApplicationContext caContext=new ClassPathXmlApplicationContext("Bean-cycle.xml");

person person=(com.jeremy.spring.cycle.person) caContext.getBean("person");

caContext.close();

}

测试结果:

person constructor.......

Setter............

init......

2014-10-14 19:49:36 org.springframework.context.support.AbstractApplicationContext doClose

信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@8965fb: startup date [Tue Oct 14 19:49:35 CST 2014]; root of context hierarchy

desdtory......

证明Bean的声明流程如上所说

1为什么需要Bean的后置处理器(就是用来在容器调用Bean的init()的方法前后进行处理)---一旦IOC配置了Bean的后置处理器是对Bean所在的IOC容器里面所有Bean都是有效的

如果不配置后置处理器,每次IOC容器就直接示例化Bean,但是如果再实际的开发中,我们需要在Bean初始前配置和其他的初始化后添加一些自己的逻辑处理??那怎么办,那这时候就需要用到Bean的后置处理器了

2配置Bean后置处理器的步骤:

  1需要新建一个类实现BeanPostProcessor接口,并实现 postProcessAfterInitialization(Object arg0, String arg1), postProcessBeforeInitialization(Object arg0, String arg1)两个方法

   arg0:就是传入的Bean对象,

   arg1:就是Bean的ID值

   返回值:就是返回一个Bean对象,我们也可以认为的修改返回的Bean对象,不一定一定要返回容器初始化的那个Bean对象

  代码下:

  

package com.jeremy.spring.cycle;

import org.springframework.beans.BeansException;

import org.springframework.beans.factory.config.BeanPostProcessor;

public class MyBeanPostProcessor implements BeanPostProcessor {

public MyBeanPostProcessor() {

// TODO Auto-generated constructor stub

}

@Override

public Object postProcessAfterInitialization(Object arg0, String arg1)

throws BeansException {

System.out.println("before init..........."+arg0.getClass());

return arg0;

}

@Override

public Object postProcessBeforeInitialization(Object arg0, String arg1)

throws BeansException {

// TODO Auto-generated method stub

System.out.println("after init..........."+arg0.getClass());

return arg0;

}

}

2在XML配置文件配置后置处理器,

3测试代码

@Test

public void testNoProcessorCycle(){

ConfigurableApplicationContext caContext=new ClassPathXmlApplicationContext("Bean-cycle.xml");

person person=(com.jeremy.spring.cycle.person) caContext.getBean("person");

caContext.close();

}

运行结果:

这是具有后置处理器Bean的生命流程流程如下:

person constructor.......

Setter............

before init...........class com.jeremy.spring.cycle.person

init...................

after init...........class com.jeremy.spring.cycle.person

destory.....................

本文内容总结:Spring的Bean的生命周期以及Bean的后置处理器

原文链接:https://www.cnblogs.com/jeremy-blog/p/4025129.html

以上是 Spring的Bean的生命周期以及Bean的后置处理器 的全部内容, 来源链接: utcz.com/z/362506.html

回到顶部