Spring基础:Bean的生命周期
Posted Lansonli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring基础:Bean的生命周期相关的知识,希望对你有一定的参考价值。
文章目录
一、Bean从创建到销毁经历的各个阶段以及每个阶段所调用的方法
1、创建后置处理器 实现 BeanPostProcesser 重写两个方法
2、配置后置处理器,对容器中的所有bean添加后置处理器的生命周期
Bean的生命周期
一、Bean从创建到销毁经历的各个阶段以及每个阶段所调用的方法
1、通过构造器创建bean实例 执行构造器
2、为bean属性赋值 执行set方法
3、初始化bean 调用bean的初始化方法,需要配置指定调用的方法
4、bean的获取 容器对象 getBean方法
5、容器关闭销毁bean 调用销毁方法,需要配置指定调用的方法
二、测试生命周期
1、准备bean
package com.lanson.bean;
/**
* @Author: lansonli
* @Description: MircoMessage:Mark_7001
*/
public class User
private Integer userid;
private String username;
private String password;
public void initUser()
System.out.println("第三步:User初始化");
public User()
System.out.println("第一步:User构造");
public void destoryUser()
System.out.println("第五步:User销毁");
@Override
public String toString()
return "User" +
"userid=" + userid +
", username='" + username + '\\'' +
", password='" + password + '\\'' +
'';
public User(Integer userid, String username, String password)
this.userid = userid;
this.username = username;
this.password = password;
public void setUserid(Integer userid)
System.out.println("setUserid");
this.userid = userid;
public void setUsername(String username)
System.out.println("第二步:User属性赋值");
this.username = username;
public void setPassword(String password)
this.password = password;
2、配置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"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user" class="com.lanson.bean.User" init-method="initUser" destroy-method="destoryUser">
<property name="username" value="lansonli"></property>
</bean>
</beans>
3、测试bean
package com.lanson.test;
import com.lanson.bean.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @Author: lansonli
* @Description: MircoMessage:Mark_7001
*/
public class Test1
@Test
public void testGetBean()
ClassPathXmlApplicationContext context =new ClassPathXmlApplicationContext("applicationContext.xml");
User user = context.getBean("user",User.class);
System.out.println("第四步:User对象从容器中获取");
// 关闭容器
context.close();
三、关于后置处理器
- 通过构造器创建bean实例 执行构造器
- 为bean属性赋值 执行set方法
- 把bean实例传递给bean的后置处理器的方法
- 初始化bean 调用bean的初始化方法,需要配置指定调用的方法
- 把bean实例传递给bean的后置处理器的方法
- bean的获取 容器对象 getBean方法
- 容器关闭销毁bean 调用销毁方法,需要配置指定调用的方法
1、创建后置处理器 实现 BeanPostProcesser 重写两个方法
package com.lanson.beanProcesser;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
/**
* @Author: lansonli
* @Description: MircoMessage:Mark_7001
*/
public class MyBeanProcesser implements BeanPostProcessor
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException
//Object bean 实例化的bean
//String beanName bean的id
System.out.println("bean:初始化方法之前");
return bean;// 这里必须return bean
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException
System.out.println("bean:初始化方法之后");
return bean;// 这里必须returnbean
2、配置后置处理器,对容器中的所有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"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user" class="com.lanson.bean.User" init-method="initUser" destroy-method="destoryUser">
<property name="username" value="lansonli"></property>
</bean>
<bean id="myBeanProcesser" class="com.lanson.beanProcesser.MyBeanProcesser"></bean>
</beans>
四、BeanPostProcessor接口作用
如果我们想在Spring容器中完成bean实例化、配置以及其他初始化方法前后要添加一些自己逻辑处理。我们需要定义一个或多个BeanPostProcessor接口实现类,然后注册到Spring IoC容器中。
- 接口中的两个方法都要将传入的bean返回,而不能返回null,如果返回的是null那么我们通过getBean方法将得不到目标。
- ApplicationContext会自动检测在配置文件中实现了BeanPostProcessor接口的所有bean,并把它们注册为后置处理器,然后在容器创建bean的适当时候调用它,因此部署一个后置处理器同部署其他的bean并没有什么区别。而使用BeanFactory实现的时候,bean 后置处理器必须通过代码显式地去注册,在IoC容器继承体系中的ConfigurableBeanFactory接口中定义了注册方法
- 📢博客主页:https://lansonli.blog.csdn.net
- 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
- 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
- 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨
以上是关于Spring基础:Bean的生命周期的主要内容,如果未能解决你的问题,请参考以下文章