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.调用 指定销毁方法

相关文章
|
24天前
|
JSON 安全 算法
|
19天前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
1月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
42 4
|
28天前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
35 0
|
21天前
|
Java API Spring
在 Spring 配置文件中配置 Filter 的步骤
【10月更文挑战第21天】在 Spring 配置文件中配置 Filter 是实现请求过滤的重要手段。通过合理的配置,可以灵活地对请求进行处理,满足各种应用需求。还可以根据具体的项目要求和实际情况,进一步深入研究和优化 Filter 的配置,以提高应用的性能和安全性。
|
10天前
|
缓存 Java Spring
实战指南:四种调整 Spring Bean 初始化顺序的方案
本文探讨了如何调整 Spring Boot 中 Bean 的初始化顺序,以满足业务需求。文章通过四种方案进行了详细分析: 1. **方案一 (@Order)**:通过 `@Order` 注解设置 Bean 的初始化顺序,但发现 `@PostConstruct` 会影响顺序。 2. **方案二 (SmartInitializingSingleton)**:在所有单例 Bean 初始化后执行额外的初始化工作,但无法精确控制特定 Bean 的顺序。 3. **方案三 (@DependsOn)**:通过 `@DependsOn` 注解指定 Bean 之间的依赖关系,成功实现顺序控制,但耦合性较高。
实战指南:四种调整 Spring Bean 初始化顺序的方案
|
23天前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
43 1
Spring 框架:Java 开发者的春天
|
15天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
34 2
|
15天前
|
消息中间件 NoSQL Java
springboot整合常用中间件框架案例
该项目是Spring Boot集成整合案例,涵盖多种中间件的使用示例,每个案例项目使用最小依赖,便于直接应用到自己的项目中。包括MyBatis、Redis、MongoDB、MQ、ES等的整合示例。
65 1
|
23天前
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。