SpringBean生命周期及类加载器简述

简介: SpringBean 类加载器

Spring bean jvm加载class初使化至进程结束bean消亡全局流程大致如下,同步的相关的简单验证

                             1.png


 

public class TestBean implements InitializingBean, DisposableBean {

   
public TestBean() {
       
System.out.println("1: constructor ----> 构造方法");
   
}

   
@PostConstruct
   
public void postConstruct()
    {
       
System.out.println("3: @PostConstruct/postConstruct ");
   
}

   
@PreDestroy
   
public void PreDestroy()
    {
       
System.out.println("7: @PreDestroy/PreDestroy ");
   
}

   
public void initMethod() {
       
System.out.println("5: initMethod指定的initMethod方法");
   
}

   
public void destroyMethod() {
       
System.out.println("9: destroyMethod指定的destroyMethod方法");
   
}

   
@Override
   
public void destroy() throws Exception {
       
System.out.println("8: DisposableBean/destroy");
   
}

   
@Override
   
public void afterPropertiesSet() throws Exception {
       
System.out.println("4: InitializingBean/afterPropertiesSet......");
   
}
}

 

public class TestBeanPostPorcesser implements BeanPostProcessor {

   
@Override
   
public Object postProcessBeforeInitialization(Object bean, String beanName)
       
throws BeansException {
       
if(beanName.equals("testBean")) {
           
System.out.println("2: BeanPostProcessor/postProcessBeforeInitialization: " + beanName);
       
}
       
return bean;
   
}

   
@Override
   
public Object postProcessAfterInitialization(Object bean, String beanName)
       
throws BeansException {
       
if(beanName.equals("testBean")) {
           
System.out.println("6: BeanPostProcessor/postProcessAfterInitialization: " + beanName);
       
}
       
return bean;
   
}
}

 

 

@Configuration
public class TestConfig {

   
@Bean(initMethod = "initMethod",destroyMethod = "destroyMethod")
   
public TestBean testBean() {
       
return new TestBean();
   
}

   
@Bean
   
public TestBeanPostPorcesser testBeanPostPorcesser() {
       
return new TestBeanPostPorcesser();
   
}
}
 
 
********************************************************************
1: constructor ----> 构造方法
2: BeanPostProcessor/postProcessBeforeInitialization: testBean
3: @PostConstruct/postConstruct 
4: InitializingBean/afterPropertiesSet......
5: initMethod指定的initMethod方法
6: BeanPostProcessor/postProcessAfterInitialization: testBean
2021-03-20 22:53:18.404  INFO 7492 --- [           main] 
o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 
7: @PreDestroy/PreDestroy 
8: DisposableBean/destroy
9: destroyMethod指定的destroyMethod方法
Process finished with exit code 130

 

 

类加载器

Ø  类加载器用来加载其他类,类加载器本身无需加载,嵌套在虚拟机上即 BootStrap

Ø  类加载器将类的字节码文件从硬盘加载进内存

Ø  系统默认三个主要类加载器,每个类负责加载特定位置:  BootStrap, ExtClassLoader,AppClassLoade(SystemCLassLoade)


 2.png

Springboot Aware接口

3.png

相关文章
|
编译器 Python Windows
解决jupyter以及windows系统中pycharm编译器画图的中文乱码问题大全
解决jupyter以及windows系统中pycharm编译器画图的中文乱码问题大全,我们在jupyter的notebook中使用matplotlib画图的时候,经常性的会遇见一些中文乱码显示□的情况,如下所示:
1712 0
解决jupyter以及windows系统中pycharm编译器画图的中文乱码问题大全
|
SQL 存储 数据可视化
Ganos H3地理网格能力解析与最佳实践
本文介绍了Ganos H3的相关功能,帮助读者快速了解Ganos地理网格的重要特性与应用实践。H3是Uber研发的一种覆盖全球表面的二维地理网格,采用了一种全球统一的、多层次的六边形网格体系来表示地球表面,这种地理网格技术在诸多业务场景中得到广泛应用。Ganos不仅提供了H3网格的全套功能,还支持与其它Ganos时空数据类型进行跨模联合分析,极大程度提升了客户对于时空数据的挖掘分析能力。
|
安全 OLAP 数据库
拒绝等待!阿里云瑶池数据库 x Qwen3,构建增强式RAG
阿里云瑶池 Dify on DMS + AnalyticDB 现已支持通义千问 Qwen3 全系列模型的私域部署,并提供独占模型服务,实现高效安全的 GraphRAG 业务应用及大模型应用开发解决方案。
|
9月前
|
存储 缓存 数据挖掘
阿里云目前最便宜云服务器介绍:38元、99元、199元性能,选购攻略参考
轻量应用服务器2核2G峰值200M带宽38元1年;云服务器经济型e实例2核2G3M带宽99元1年;云服务器通用算力型u1实例2核4G5M带宽199元1年。对于还未使用过阿里云服务器的用户来说,大家也不免有些疑虑,这些云服务器性能究竟如何?它们适用于哪些场景?能否满足自己的使用需求呢?接下来,本文将为您全方位介绍这几款云服务器,以供您了解及选择参考。
|
6月前
|
人工智能 NoSQL 前端开发
面试真题
多套AI与Java面试题涵盖RAG、智能体、大模型部署、分布式系统、JVM调优、数据库设计等核心技术,深入考察项目经验、架构能力与技术深度,适用于中高级工程师岗位选拔。
|
6月前
|
Arthas Java 测试技术
Arthas安装
Arthas是一款Java诊断工具,需先启动Java应用并安装JDK。通过arths-boot.jar启动后选择对应进程即可接入,支持多进程管理,适用于SpringBoot等应用的线上问题排查与性能分析。(236字符)
|
机器学习/深度学习 人工智能 Cloud Native
.NET现在可以做什么,有哪些公司在用的?
.NET是一个开源(MIT License)、免费、跨平台的开发人员平台框架,用于生成多种类型的应用程序。.NET 可以运行使用多种语言(C#、Visual Basic、F#)编写的程序,其中C#是最常用的语言。
526 0
|
前端开发 安全 JavaScript
2025年,Web3开发学习路线全指南
本文提供了一条针对Dapp应用开发的学习路线,涵盖了Web3领域的重要技术栈,如区块链基础、以太坊技术、Solidity编程、智能合约开发及安全、web3.js和ethers.js库的使用、Truffle框架等。文章首先分析了国内区块链企业的技术需求,随后详细介绍了每个技术点的学习资源和方法,旨在帮助初学者系统地掌握Dapp开发所需的知识和技能。
2025年,Web3开发学习路线全指南
|
负载均衡 算法 容灾
slb基础概念
【9月更文挑战第2天】
4644 25
|
监控 安全 Linux
在Linux中,如何配置VPN服务?
在Linux中,如何配置VPN服务?