5_Spring_Bean的生命周期

5_Spring_Bean的生命周期

bean从创建到销毁经历的各个阶段以及每个阶段所调用的方法

1 通过构造器创建bean实例           执行构造器

2 为bean属性赋值                         执行set方法

3 初始化bean                                调用bean的初始化方法,需要配置指定调用的方法

4 bean的获取                                容器对象 getBean方法

5 容器关闭销毁bean                      调用销毁方法,需要配置指定调用的方法

测试生命周期

准备bean

  1. package com.msb.bean;
  2. /**
    • @Author: Ma HaiYang
    • @Description: MircoMessage:Mark_7001
  3. */
  4. public class User {
  5. private Integer userid;
  6. private String username;
  7. private String password;
  8. public void initUser(){
  9. System.out.println("第三步:User初始化");
  10. }
  11. public User() {
  12. System.out.println("第一步:User构造");
  13. }
  14. public void destoryUser(){
  15. System.out.println("第五步:User销毁");
  16. }
  17. @Override
  18. public String toString() {
  19. return "User{" +
  20. "userid=" + userid +
  21. ", username='" + username + ''' +
  22. ", password='" + password + ''' +
  23. '}';
  24. }
  25. public User(Integer userid, String username, String password) {
  26. this.userid = userid;
  27. this.username = username;
  28. this.password = password;
  29. }
  30. public void setUserid(Integer userid) {
  31. System.out.println("setUserid");
  32. this.userid = userid;
  33. }
  34. public void setUsername(String username) {
  35. System.out.println("第二步:User属性赋值");
  36. this.username = username;
  37. }
  38. public void setPassword(String password) {
  39. this.password = password;
  40. }
  41. }

配置bean

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns:p="http://www.springframework.org/schema/p"
  4. xmlns:c="http://www.springframework.org/schema/c"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd">
  7. <bean id="user" class="com.msb.bean.User" init-method="initUser"
    destroy-method="destoryUser">
  8. <property name="username" value="xiaoming"></property>
  9. </bean>
  10. </beans>

测试bean

  1. package com.msb.test;
  2. import com.msb.bean.User;
  3. import org.junit.Test;
  4. import org.springframework.context.ApplicationContext;
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;
  6. /**
    • @Author: Ma HaiYang
    • @Description: MircoMessage:Mark_7001
  7. */
  8. public class Test1 {
  9. @Test
  10. public void testGetBean(){
  11. ClassPathXmlApplicationContext context =new
    ClassPathXmlApplicationContext("applicationContext.xml");
  12. User user = context.getBean("user",User.class);
  13. System.out.println("第四步:User对象从容器中获取");
  14. // 关闭容器
  15. context.close();
  16. }
  17. }

关于后置处理器

1 通过构造器创建bean实例           执行构造器

2 为bean属性赋值                         执行set方法

3 把bean实例传递给bean的后置处理器的方法

4 初始化bean                                调用bean的初始化方法,需要配置指定调用的方法

5 把bean实例传递给bean的后置处理器的方法

6 bean的获取                                容器对象 getBean方法

7 容器关闭销毁bean                      调用销毁方法,需要配置指定调用的方法

1 创建后置处理器 实现 BeanPostProcesser  重写两个方法

  1. package com.msb.beanProcesser;
  2. import org.springframework.beans.BeansException;
  3. import org.springframework.beans.factory.config.BeanPostProcessor;
  4. /**
    • @Author: Ma HaiYang
    • @Description: MircoMessage:Mark_7001
  5. */
  6. public class MyBeanProcesser implements BeanPostProcessor {
  7. @Override
  8. public Object postProcessBeforeInitialization(Object bean, String
    beanName) throws BeansException {
  9. //Object bean 实例化的bean
  10. //String beanName bean的id
  11. System.out.println("bean:初始化方法之前");
  12. return bean;// 这里必须return bean
  13. }
  14. @Override
  15. public Object postProcessAfterInitialization(Object bean, String
    beanName) throws BeansException {
  16. System.out.println("bean:初始化方法之后");
  17. return bean;// 这里必须returnbean
  18. }
  19. }

2 配置后置处理器,对容器中的所有bean添加后置处理器的生命周期

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns:p="http://www.springframework.org/schema/p"
  4. xmlns:c="http://www.springframework.org/schema/c"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd">

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

posted @ 2023-07-30 12:35  AidenDong  阅读(58)  评论(0)    收藏  举报