深入理解 Java Bean 的生命周期及各个阶段解析

目录

  • 引言:
  • 一、什么是Java Bean
  • 二、Bean的生命周期概述
  • 三、Bean的创建阶段
  • 四、属性设置阶段
  • 初始化阶段
  • 六、使用阶段
  • 七、销毁阶段

引言:

Java Bean是Java编程中经常使用的重要概念,它是可重用、可移植、可序列化的组件。在Java开发中,我们常常会遇到Bean对象,但是对于Bean的生命周期和各个阶段可能并不完全了解。本文将深入探讨Java Bean的生命周期,逐步解析Bean对象从创建到销毁的各个重要阶段。

一、什么是Java Bean

Java Bean是一个符合特定规范的Java类,通常具有私有的成员变量、公共的getter和setter方法,以及一个无参构造函数。这些特性使得Bean对象易于序列化和反序列化,并且被广泛应用于Java开发中,尤其在框架和应用程序中经常被用作数据封装和组件复用。

二、Bean的生命周期概述

Java Bean的生命周期从创建到销毁可以分为以下五个关键阶段:

  1. 创建阶段(实例化 Bean):当使用构造函数或者工厂方法创建Bean对象时,就进入了创建阶段。

  2. 属性设置阶段:在Bean对象创建后,通过setter方法设置Bean的各个属性。

  3. 初始化阶段:当Bean的属性设置完成后,会触发初始化回调方法,进行一些额外的初始化工作。

    • 实现了各种 Aware 通知的⽅法,如 BeanNameAware、BeanFactoryAware、
      ApplicationContextAware 的接⼝⽅法
    • 执⾏ BeanPostProcessor 初始化前置⽅法
    • 执⾏ @PostConstruct 初始化⽅法,依赖注⼊操作之后被执⾏
    • 执⾏⾃⼰指定的 init-method ⽅法
    • 执⾏ BeanPostProcessor 初始化后置⽅法
  4. 使用阶段:在初始化完成后,Bean对象处于可用状态,可以供应用程序使用。

  5. 销毁阶段:当Bean对象不再需要时,会触发销毁回调方法,进行资源释放等清理工作,销毁容器的各种⽅法,如 @PreDestroy、DisposableBean 接⼝⽅法、destroy-method

@PostConstruct 用于在 bean 初始化之后执行特定的方法。标记了 @PostConstruct 注解的方法会在 bean 的依赖注入完成后立即执行。通常在这个方法内进行一些初始化操作,例如数据库连接的建立或资源的加载。
@PreDestroy 用于在 bean 销毁之前执行特定的方法。
标记了 @PreDestroy 注解的方法会在容器或应用程序关闭或 bean 被销毁前调用,用于清理资源,例如关闭数据库连接或释放文件句柄等。

流程如下图:
在这里插入图片描述

我们可以以生活中的场景来理解Bean的生命周期
比如我们现在结婚都需要买新房,那么从买房子到使用还需要这样一段流程:

  1. 先交钱买房子(实例化)
  2. 装修 (设置属性)
  3. 给家里添置各种家具(初始化)
  4. 进行入住(使用Bean)
  5. 用够70年然后交还(销毁)
    通过这样的案例我们应该能更好的理解Bean的生命周期

三、Bean的创建阶段

在Bean的创建阶段,可以通过构造函数或者工厂方法来创建Bean对象。构造函数用于创建对象的实例,而工厂方法则通过调用静态方法来获取Bean的实例。在创建阶段,还可以利用依赖注入(DI)等技术,将依赖的对象传递给Bean。

// 示例1:使用构造函数创建Bean对象
public class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}// getter和setter方法省略
}// 示例2:使用工厂方法创建Bean对象
public class BeanFactory {public static Person createPerson(String name, int age) {return new Person(name, age);}
}

四、属性设置阶段

在创建Bean对象后,我们通常会通过setter方法来设置Bean的各个属性。这些属性可以是基本数据类型、引用类型,甚至是其他的Bean对象。属性设置阶段是为了确保Bean对象在初始化之前具备正确的状态。

// 示例:设置Bean的属性
Person person = new Person();
person.setName("John Doe");
person.setAge(30);

初始化阶段

当Bean的属性设置完成后,将会触发初始化回调方法。在Java中,我们常常会使用@PostConstruct注解或者实现InitializingBean接口来指定初始化回调方法。在初始化阶段,可以进行一些额外的初始化工作,如连接数据库、加载配置等。

public class MyBean {@PostConstructpublic void init() {// 执行初始化操作,例如初始化数据库连接等}
}

六、使用阶段

初始化完成后,Bean对象处于可用状态,可以供应用程序使用。在使用阶段,Bean可能会被注入到其他组件中,执行业务逻辑等。

public class UserService {private UserDao userDao;// 通过依赖注入注入UserDao对象@Autowiredpublic UserService(UserDao userDao) {this.userDao = userDao;}// 执行业务逻辑,使用userDao对象// ...
}

七、销毁阶段

当Bean对象不再需要时,会触发销毁回调方法。在Java中,我们可以使用@PreDestroy注解或者实现DisposableBean接口来指定销毁回调方法。在销毁阶段,可以进行一些资源释放和清理工作,如关闭数据库连接、释放文件资源等。

public class MyBean {@PreDestroypublic void destroy() {// 执行销毁操作,例如关闭数据库连接等}
}

结论:
Java Bean的生命周期是一个重要的概念,在Java开发中经常会遇到。通过本文的介绍,我们了解了Bean从创建到销毁的各个阶段,包括创建阶段、属性设置阶段、初始化阶段、使用阶段和销毁阶段。深入理解Bean的生命周期有助于更好地管理Bean对象,确保其状态正确、行为可靠,并且能够优化资源的利用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/179058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最新的外贸自建站教程?做外贸如何建网站?

外贸自建站教程步骤有哪些?海洋建站如何做网站搭建? 想要了解关于外贸自建站的最新教程吗?外贸自建站不再是高不可攀的难题,相反,它为企业提供了更多的机会和自主掌握业务的空间。海洋建站将为您提供一份全面的指南&a…

Android 编译的配置文件:android.mk 和android.bp

Android.bp文件首先是Android系统的一种编译配置文件,是用来代替原来的Android.mk文件的。在Android7.0以前,Android都是使用make来组织各模块的编译,对应的编译配置文件就是Android.mk。在Android7.0开始,Google引入了ninja和kat…

什么是大数据测试?有哪些类型?应该怎么测?

随着目前世界上各个国家使用大数据应用程序或应用大数据技术场景的数量呈指数增长,相应的,对于测试大数据应用时所需的知识与大数据测试工程师的需求也在同步增加。 针对大数据测试的相关技术已慢慢成为当下软件测试人员需要了解和掌握的一门通用技术。…

SPSS生存分析:寿命表分析

前言: 本专栏参考教材为《SPSS22.0从入门到精通》,由于软件版本原因,部分内容有所改变,为适应软件版本的变化,特此创作此专栏便于大家学习。本专栏使用软件为:SPSS25.0 本专栏所有的数据文件请点击此链接下…

15 网关实战: 微服务集成Swagger实现在线文档

上节介绍了网关层面聚合API文档,通过网关的路由信息找到了各个服务的请求地址,这节讲一下微服务如何集成Swagger。 网关的API文档默认调用的是微服务的**/v2/api-docs**这个接口获取API详细信息,比如文章服务的URL:http://localhost:9000/blog-article/v2/api-docs,返回信…

Python分享之字符串格式化 (%操作符)

在许多编程语言中都包含有格式化字符串的功能,比如C和Fortran语言中的格式化输入输出。Python中内置有对字符串进行格式化的操作%。 模板 格式化字符串时,Python使用一个字符串作为模板。模板中有格式符,这些格式符为真实值预留位置&#xff…

Python二叉树用法介绍

更多资料获取 📚 个人网站:ipengtao.com 二叉树是一种常见的数据结构,具有树形结构,每个节点最多有两个子节点。Python中有多种方式来表示和操作二叉树,本文将介绍二叉树的基本概念、构建、遍历和一些常见操作&#x…

3个.NET开源免费的仓库管理系统(WMS)

前言 今天给大家推荐3个.NET开源免费的WMS仓库管理系统(注意:以下排名不分先后)。 仓储管理系统介绍 仓储管理系统(Warehouse Management System,WMS)是一种用于管理和控制仓库操作的软件系统&#xff0…

F5社区学习心得分享:如何克服云迁移挑战?

伴随数字时代的快速发展,很多企业都会借助云迁移,踏上转型之旅。尽管云迁移被认为是一种能够节约成本,且不会影响正常运营的现代化改造举措,然而我们并不能低估它的复杂性。正如有研究表明,约有41%的企业并没有通过云迁…

lv11 嵌入式开发 WDT实验 12

目录 1 WDT简介 2 Exynos4412下的WDT控制器 2.1 概述 2.2 WDT的特性 2.3 工作原理 2.4 其他细节 3 WDT寄存器详解 3.1 WTCON控制寄存器 3.2 WTDAT 实时中断寄存器 3.3 WTCNT 递减计数器 3.4 WTCLRINT清除中断寄存器 4 WDT编程 1 WDT简介 Watch Dog Timer即看门狗定…

ZKP15.2 Formal Methods in ZK (Part I)

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 15: Secure ZK Circuits via Formal Methods (Guest Lecturer: Yu Feng (UCSB & Veridise)) 15.2 Formal Methods in ZK (Part I) Circuits Workflow Source Code: Witness Generation and ConstraintsWitness Generatio…

【力扣】 209. 长度最小的子数组

【力扣】 209. 长度最小的子数组 文章目录 【力扣】 209. 长度最小的子数组1. 题目介绍2. 解法2.1 暴力求解2.2 前缀和 二分查找2.3 滑动窗口2.4 贪心回溯 3. Danger参考 1. 题目介绍 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 …

ubuntu安装远程桌面

ubuntu安装远程桌面 xrdp远程桌面访问 #用windows远程桌面连接成功,只能用root用户,用普通用户连接是灰色 sudo apt install xrdp systemctl status xrdpsystemctl stop xrdp解决普通用户连接是灰色 参考链接: https://blog.csdn.net/leegh1992/article/details/51160864 s…

PyCharm安装PyQt5及工具(Qt Designer、PyUIC、PyRcc)详细教程来了

Qt是常用的用户界面设计工具,而在Python中则使用PyQt这一工具包,它是Python编程语言和Qt库的成功融合。这篇博文通过图文详细介绍在PyCharm中如何完整优雅地安装配置PyQt5的所有工具包,主要内容包括PyQt5、PyQt5-tools的依赖包安装和Qt Desig…

C或C++报错:ld returned 1 exit status报错的原因

C或C报错:ld returned 1 exit status(ld返回1,退出状态) 可能是以下原因: 1)程序正在运行,无法编译,上次运行的窗口未关闭。 程序窗口重复运行没有及时关闭,存在多个打开窗…

Python中的sys模块详解

1. 简介 sys模块是Python标准库中的一个内置模块,提供了与Python解释器和运行环境相关的功能。它包含了一些与系统操作和交互相关的函数和变量,可以用于获取命令行参数、控制程序的执行、管理模块和包、处理异常等。 2. 常用函数和变量 2.1 命令行参数…

二叉树之推排序(升序)

目录 1.思路1.1大堆的建立方法1.2排序的方法 2.代码实现以及测试代码 1.思路 如何将一个堆进行排序,并变成升序?首先,如果要完成升序,那我们可以建立一个大堆,因为大堆可以选出一个最大的值放在堆的最上面&#xff0c…

数组中的第 K 个最大元素(C++实现)

数组中的第 K 个最大元素 题目思路代码 题目 数组中的第 K 个最大元素 思路 通过使用优先队列(最大堆)来找到数组中第k大的元素。通过弹出最大堆中的前k-1个元素,留下堆中的顶部元素作为结果返回。 代码 class Solution { public:int find…

Java17(LTS Long Term Support)特性

支持JDK17的主流技术框架 spring framework 6.xspringboot 3.xkafka 3.0(不在支持jdk8)jenkins 2.357(必须jdk11起步)James Gosling表示赶紧弃用Java8,使用性能最好的JDK17Chart GPT也推荐JDK17,从长期到性能来说。 JDK17的特性 …

htop命令中显示相同进程的解决方案

使用 htop 的过程中会发现有很多同样的进程被标注了绿色大量显示。如下图所示。 这使得在大量程序运行时想要找到需要观察的进程变的困难。本文介绍了如何省略这些重复现实的进程。 输入 htop,显示出 htop 界面。按下 F2 键,进入 Setup 模式点击 Displa…