关于Java中Bean的生命周期详解

 更新时间:2023年08月03日 10:34:16   作者:Mᴇᴇᴛ ꦿ᭄.  
这篇文章主要介绍了关于Java中Bean的生命周期详解,所谓的⽣命周期指的是⼀个对象从诞⽣到销毁的整个⽣命过程,我们把这个过程就叫做⼀个对象的⽣命周期,需要的朋友可以参考下

⽣命周期

所谓的⽣命周期指的是⼀个对象从诞⽣到销毁的整个⽣命过程,我们把这个过程就叫做⼀个对象的⽣命周期。

Bean 的⽣命周期分为以下 5 ⼤部分:

  1. 实例化 Bean(为 Bean 分配内存空间)
  2. 设置属性(Bean 注⼊和装配)
  3. Bean 初始化
    • 实现了各种 Aware 通知的⽅法,如 BeanNameAware、BeanFactoryAware、ApplicationContextAware 的接⼝⽅法;
    • 执⾏ BeanPostProcessor 初始化前置⽅法;
    • 执⾏ @PostConstruct 初始化⽅法,依赖注⼊操作之后被执⾏;
    • 执⾏⾃⼰指定的 init-method ⽅法(如果有指定的话);
    • 执⾏ BeanPostProcessor 初始化后置⽅法。
  4. 使⽤ Bean
  5. 销毁 Bean
    • 销毁容器的各种⽅法,如 @PreDestroy、DisposableBean 接⼝⽅法、destroy-method。
    • 执⾏流程如下图所示:

实例化和初始化的区别

实例化和属性设置是 Java 级别的系统“事件”,其操作过程不可⼈⼯⼲预和修改;

⽽初始化是给开发者提供的,可以在实例化之后,类加载完成之前进⾏⾃定义“事件”处理。

生命流程的“故事”

Bean 的⽣命流程看似繁琐,但咱们可以以⽣活中的场景来理解它,⽐如我们现在需要买⼀栋房⼦,那么我们的流程是这样的:

  1. 先买房(实例化,从⽆到有);
  2. 装修(设置属性);
  3. 买家电,如洗⾐机、冰箱、电视、空调等([各种]初始化);
  4. ⼊住(使⽤ Bean);
  5. 卖出去(Bean 销毁)。

生命周期演示

@Component
public class BeanLifeComponent implements BeanNameAware {
 @PostConstruct
 public void postConstruct() {
 System.out.println("执⾏ PostConstruct()");
 }
 public void init() {
 System.out.println("执⾏ BeanLifeComponent init-method");
 }
 @PreDestroy
 public void preDestroy() {
 System.out.println("执⾏:preDestroy()");
 }
 public void setBeanName(String s) {
 System.out.println("执⾏了 setBeanName ⽅法:" + s);
 }
}

xml 配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:content="http://www.springframework.org/schema/context"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
 <content:component-scan base-package="com.bit.component"></content:component-scan>
 <beans>
 <bean id="beanLifeComponent" class="com.bit.component.BeanLifeComponent" init-method="init"></bean>
 </beans>
</beans>

调用类:

public class BeanLifeTest {
 public static void main(String[] args) {
 ClassPathXmlApplicationContext context =
 new ClassPathXmlApplicationContext("spring-config.xml");
 BeanLife life = context.getBean(BeanLife.class);
 System.out.println("执⾏ main ⽅法");
 // 执⾏销毁⽅法
 context.destroy();
 }
}

到此这篇关于关于Java中Bean的生命周期详解的文章就介绍到这了,更多相关Bean的生命周期内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • IDEA修改SVN地址的实现

    IDEA修改SVN地址的实现

    如果你正在使用SVN进行版本控制,并且需要更改你的SVN地址,那么这篇文章将为你提供必要的步骤和指导,感兴趣的可以了解一下
    2023-12-12
  • IDEA中实现springboot热部署方式

    IDEA中实现springboot热部署方式

    在IDEA中实现SpringBoot的热部署可以通过修改设置来完成,首先在设置中搜索Compiler,并勾选Build project automatically,然后进入Advanced Settings,勾选Allow auto-make to start even if developed application is currently running
    2024-09-09
  • 一文带你搞懂Java8的LocalDateTime

    一文带你搞懂Java8的LocalDateTime

    LocalDateTime 是Java8中新加入的日期时间类,现在都 Java20 了,不会还有人没用过 LocalDateTime 吧?今天给大家演示一下 LocalDateTime 的常用方法
    2023-04-04
  • 详解Java中Period类的使用方法

    详解Java中Period类的使用方法

    Period类通过年、月、日相结合来描述一个时间量,最高精度是天。本文将通过示例详细为大家讲讲Period类的使用,需要的可以参考一下
    2022-05-05
  • springboot+chatgpt+chatUI Pro开发智能聊天工具的实践

    springboot+chatgpt+chatUI Pro开发智能聊天工具的实践

    本文主要介绍了springboot+chatgpt+chatUI Pro开发智能聊天工具的实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • java实现微信小程序加密数据解密算法

    java实现微信小程序加密数据解密算法

    这篇文章主要为大家详细介绍了java实现微信小程序加密数据解密算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • JetCache 缓存框架的使用及源码解析(推荐)

    JetCache 缓存框架的使用及源码解析(推荐)

    JetCache是一个基于Java的缓存系统封装,提供统一的API和注解来简化缓存的使用。本文重点给大家介绍JetCache 缓存框架的使用及源码分析,感兴趣的朋友一起看看吧
    2022-01-01
  • Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔断的示例

    Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔断的示例

    这篇文章主要介绍了Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔断的示例,帮助大家更好的理解和学习使用Spring Cloud,感兴趣的朋友可以了解下
    2021-03-03
  • JDBC下Idea添加mysql-jar包的详细过程

    JDBC下Idea添加mysql-jar包的详细过程

    这篇文章主要介绍了JDBC下Idea添加mysql-jar包的详细过程,添加jar包首先到官网下载jar包,然后idea导入jar包,在就是检查,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-11-11
  • Java中判断对象是否为空的方法的详解

    Java中判断对象是否为空的方法的详解

    这篇文章主要介绍了Java中判断对象是否为空的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04

最新评论