5_Spring_Bean的生命周期
bean从创建到销毁经历的各个阶段以及每个阶段所调用的方法
1 通过构造器创建bean实例 执行构造器
2 为bean属性赋值 执行set方法
3 初始化bean 调用bean的初始化方法,需要配置指定调用的方法
4 bean的获取 容器对象 getBean方法
5 容器关闭销毁bean 调用销毁方法,需要配置指定调用的方法
测试生命周期
准备bean
- package com.msb.bean;
- /**
-
- @Author: Ma HaiYang
-
- @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;
-
}
- }
配置bean
- <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">
-
destroy-method="destoryUser"><**bean** id="user" class="com.msb.bean.User" init-method="initUser"
-
<**property** name="username" value="xiaoming"></**property**>
-
</**bean**>
- </beans>
测试bean
- package com.msb.test;
- import com.msb.bean.User;
- import org.junit.Test;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- /**
-
- @Author: Ma HaiYang
-
- @Description: MircoMessage:Mark_7001
- */
- public class Test1 {
-
@Test
-
**public** **void** **testGetBean**(){
-
ClassPathXmlApplicationContext("applicationContext.xml");ClassPathXmlApplicationContext context =**new**
-
User user = context.getBean("user",User.class);
-
System.out.println("第四步:User对象从容器中获取");
-
// 关闭容器
-
context.close();
-
}
- }
关于后置处理器
1 通过构造器创建bean实例 执行构造器
2 为bean属性赋值 执行set方法
3 把bean实例传递给bean的后置处理器的方法
4 初始化bean 调用bean的初始化方法,需要配置指定调用的方法
5 把bean实例传递给bean的后置处理器的方法
6 bean的获取 容器对象 getBean方法
7 容器关闭销毁bean 调用销毁方法,需要配置指定调用的方法
1 创建后置处理器 实现 BeanPostProcesser 重写两个方法
- package com.msb.beanProcesser;
- import org.springframework.beans.BeansException;
- import org.springframework.beans.factory.config.BeanPostProcessor;
- /**
-
- @Author: Ma HaiYang
-
- @Description: MircoMessage:Mark_7001
- */
- public class MyBeanProcesser implements BeanPostProcessor {
-
@Override
-
beanName) throws BeansException {public Object postProcessBeforeInitialization(Object bean, String
-
//Object bean 实例化的bean
-
//String beanName bean的id
-
System.out.println("bean:初始化方法之前");
-
return bean;// 这里必须return bean
-
}
-
@Override
-
beanName) throws BeansException {public Object postProcessAfterInitialization(Object bean, String
-
System.out.println("bean:初始化方法之后");
-
return bean;// 这里必须returnbean
-
}
- }
2 配置后置处理器,对容器中的所有bean添加后置处理器的生命周期
- <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">
-
destroy-method="destoryUser"><bean id="user" class="com.msb.bean.User" init-method="initUser"
-
<property name="username" value="xiaoming"></property>
-
</bean>
-
class="com.msb.beanProcesser.MyBeanProcesser"><bean id="myBeanProcesser"
BeanPostProcessor接口作用:
如果我们想在Spring容器中完成bean实例化、配置以及其他初始化方法前后要添加一些自己逻辑处理。我们需要定义一个或多个BeanPostProcessor接口
现类,然后注册到Spring IoC容器中。
1、接口中的两个方法都要将传入的bean返回,而不能返回null,如果返回的是null那么我们通过getBean方法将得不到目标。
2、ApplicationContext会自动检测在配置文件中实现了BeanPostProcessor接口的所有bean,并把它们注册为后置处理器,然后在容器创建bean的适当时候调用它,因此部署一个后置处理器同部署其他的bean并没有什么区别。而使用BeanFactory实现的时候,bean 后置处理器必须通过代码显式地去注册,在IoC容器继承体系中的ConfigurableBeanFactory接口中定义了注册方法
Generated with Mybase Desktop 8.2.13
标签:www,生命周期,Spring,bean,springframework,Bean,beans,org,public From: https://www.cnblogs.com/01way/p/17591272.html