Spring框架:第三章:对象的生命周期及单例bean生命周期的11个步骤

简介: Spring框架:第三章:对象的生命周期及单例bean生命周期的11个步骤

IOC之Bean的生命周期

实验22:创建带有生命周期方法的bean

public class Person {
  private Integer id;
  private String name;
  public void init() {
    System.out.println("这是person对象的初始化方法");
  }
  public void destroy() {
    System.out.println("这是person对象的销毁方法");
  }

配置信息:

 <!-- 
  init-method="init"    初始化方法 在对象被创建之后
  destroy-method="destroy"  销毁方法  在容器关闭的时候执行
  -->
<bean id="p24" class="com.pojo.Person" init-method="init" destroy-method="destroy">
  <property name="id" value="24"></property>
</bean>

测试代码:

@Test
public void test13() throws Exception {
  ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
  System.out.println(applicationContext.getBean("p24"));
  applicationContext.close();
}

Bean的后置处理器BeanPostProcessor

bean的后置处理器,可以在bean对象初始化之前或之后做一些工作。

要使用bean的后置处理器,需要实现这个接口并配置。

实验23:测试bean的后置处理器

person对象,一定要有初始化方法

public class Person {
  private Integer id;
  private String name;
  private Car car;
  public void init() {
    System.out.println("这是person对象的初始化方法");
  }

后置处理器对象

public class MyBeanPostProcessor implements BeanPostProcessor {
  @Override
  public Object postProcessAfterInitialization(Object bean, String id) throws BeansException {
    System.out.println("初始化之后执行  bean => " + bean + ", id => " + id);
    return bean;
  }
  /**
   * bean是当前正在初始化的对象
   * id 是当前正在初始化对象的id值 
   */
  @Override
  public Object postProcessBeforeInitialization(Object bean, String id) throws BeansException {
    System.out.println("初始化之前执行  bean => " + bean + ", id => " + id);
    return bean;
  }
}

配置信息:

 <!-- 
  init-method="init"    初始化方法 在对象被创建之后
  destroy-method="destroy"  销毁方法  在容器关闭的时候执行
  -->
<bean id="p24" class="com.pojo.Person" init-method="init" destroy-method="destroy">
  <property name="id" value="24"></property>
</bean>
<!-- 配置bean的后置处理器 -->
<bean class="com.pojo.MyBeanPostProcessor" />

测试的代码:

@Test
public void test13() throws Exception {
  ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean2.xml");
  System.out.println(applicationContext.getBean("p24"));
  applicationContext.close();
}

对于单例的bean,生命周期有11个步骤:

1.instantiate bean对象实例化,bean对象实例化,是在加载配置文件的时候实例的。即,我们启动spring容器的时候,加载配置文件,此时就实例化bean了。

2.populate properties 封装属性

3.如果Bean实现BeanNameAware, 执行 setBeanName

4.如果Bean实现BeanFactoryAware 或者 ApplicationContextAware,设置工厂 setBeanFactory 或者上下文对象 setApplicationContext

5.如果存在类实现 BeanPostProcessor(后处理Bean) ,执行postProcessBeforeInitialization(此点常常用来增强bean)

6.如果Bean实现InitializingBean 执行 afterPropertiesSet

7.调用 指定初始化方法 init

8.如果存在类实现 BeanPostProcessor(后处理Bean) ,执行postProcessAfterInitialization(此点常常用来增强bean)

9.执行业务处理

10.如果Bean实现 DisposableBean 执行 destroy

11.调用 指定销毁方法

相关文章
|
12天前
|
存储 安全 Java
事件的力量:探索Spring框架中的事件处理机制
事件的力量:探索Spring框架中的事件处理机制
26 0
|
22天前
|
缓存 Java Spring
Spring 框架中 Bean 的生命周期
Spring 框架中 Bean 的生命周期
30 1
|
1月前
|
XML Java 开发者
Spring Boot中的bean注入方式和原理
Spring Boot中的bean注入方式和原理
50 0
|
1月前
|
开发框架 安全 Java
Spring 框架:企业级应用开发的强大工具
在当今数字化时代,企业级应用开发的需求日益增长。为了满足这一需求,开发者们需要一款功能强大、易于使用的开发框架。Spring 框架作为 Java 领域的领先者,为企业级应用开发提供了全面的解决方案。本文将深入探讨 Spring 框架的各个方面,包括其历史、核心模块、优势以及应用场景。
24 0
|
1月前
|
SpringCloudAlibaba Java 持续交付
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
141 0
|
6天前
|
Java 数据库连接 开发者
浅谈Spring的Bean生命周期
浅谈Spring的Bean生命周期
15 1
|
11天前
|
XML Java 数据格式
Bean工厂探秘:解析Spring底层工厂体系BeanFactory的神奇之道
Bean工厂探秘:解析Spring底层工厂体系BeanFactory的神奇之道
19 0
Bean工厂探秘:解析Spring底层工厂体系BeanFactory的神奇之道
|
11天前
|
Java Spring
玩转对象掌控权:深入Spring,精准控制对象创建次数
玩转对象掌控权:深入Spring,精准控制对象创建次数
14 0
|
11天前
|
Java 关系型数据库 MySQL
高级对象装配:解析Spring创建复杂对象的秘诀
高级对象装配:解析Spring创建复杂对象的秘诀
26 0
高级对象装配:解析Spring创建复杂对象的秘诀
|
20天前
|
开发框架 安全 Java
探索 Spring 框架:企业级应用开发的强大工具
探索 Spring 框架:企业级应用开发的强大工具
19 1