博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring之bean的生命周期
阅读量:3905 次
发布时间:2019-05-23

本文共 2214 字,大约阅读时间需要 7 分钟。

bean的生命周期

  1. 何为生命周期

    从对象创建到对象销毁的过程

  2. bean的生命周期

    2.1通过构造去创建bean实例
    2.2为bean的属性设置值和对其他的bean的引用(调用set方法的过程)
    2.3调用bean的初始化方法(需要在bean中自定义一个初始化方法)
    2.4bean使用(此时bean对象已经获取到了)
    2.5当容器关闭的时候,调用bean的销毁方法(需要在bean中配置销毁的方法)

下面演示一下bean的生命周期的具体过程:

首先编写一个类,用该类来进行bean生命周期的演示,创建过程(包括定义属性有参构造,set方法,初始化方法,和销毁的方法)

public class LifeCycle {
public LifeCycle(){
System.out.println("bean对象实例化出来了"); } private String name; public void setName(String name) {
System.out.println("set方法执行"); this.name = name; } /*自定义初始化方法,演示bean的生命周期*/ public void initial(){
System.out.println("初始化方法执行"); } /*自定义销毁方法,演示bean的生命周期*/ public void destr(){
System.out.println("销毁方法执行"); } @Override public String toString() {
return "LifeCycle{" + "name='" + name + '\'' + '}'; }}

在spring核心文件application-context.xml中进行该类对象的创建,并且注入属性。

编写测试:

@Test    public void testCycle() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //创建了该对象 LifeCycle life = context.getBean("lifeCycle", LifeCycle.class); //演示生命周期中的使用对象阶段 System.out.println("对象可以使用了"); System.out.println(life); //需要手动调用销毁方法,才会执行类中定义的销毁的方法。 context.close(); }

运行结果:

在这里插入图片描述

!!!!!!!需要注意的是,如果加上spring中的后置处理器,那么bean对象的生命周期将由5步变为7步,其中需要加上的两个方法分别是bean对象初始化之前的方法和bean对象初始化之后的方法

关于如何加上这两个方法,步骤是:

  1. 自定义一个类,实现BeanPostProcessor接口,该接口有两个抽象方法,覆写这两个方法
    在这里插入图片描述
public class MyBeanPost implements BeanPostProcessor {
@Override public Object postProcessBeforeInitialization(Object o, String s) throws BeansException {
System.out.println("初始化方法之前执行"); return o; } @Override public Object postProcessAfterInitialization(Object o, String s) throws BeansException {
System.out.println("初始化方法之后执行"); return o; }}

2.在核心配置文件当中,配置后置处理器,也可以理解为创建该对象,只不过该对象一创建,spring发现它实现了BeanPost接口,那么就把它当做可以用于作用其他bean对象生命周期中的两个阶段的方法

加上了后置处理器之后的bean对象的生命周期运行截图:

在这里插入图片描述
最后总结:
如果没有配置后置处理器,那么bean的生命周期只有五步,如果配置了后置处理器,那么就有七步。并且需要注意到的是一旦配置了后置处理器,那么spring会为每一个bean对象都配置后置处理器,因而每一个bean对象创建之后,都会执行自定义后置处理器中的两个方法的内容(现阶段是打印一句话,也许可以用于进行更为复杂的操作。)

转载地址:http://xrlen.baihongyu.com/

你可能感兴趣的文章
Docker Machine
查看>>
Union Mount
查看>>
Best Practices for Writing Dockerfiles
查看>>
Create a Base Image
查看>>
Silicon Valley
查看>>
自媒体的风格
查看>>
宅米网性能优化实践
查看>>
Python sort and sorted
查看>>
Python List Operation
查看>>
python auto-increment
查看>>
Python List Comprehensions
查看>>
Python 递归 list不正确
查看>>
Python copy a list
查看>>
Iteration Vs Recursion Java
查看>>
What are some of the differences between using recursion to solve a problem versus using iteration?
查看>>
subsets
查看>>
Python Nested List Operation
查看>>
Python Binary Search
查看>>
How to append list to second list
查看>>
Write a program to print all permutations of a given string
查看>>