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

相关文章
|
SQL 存储 数据可视化
Ganos H3地理网格能力解析与最佳实践
本文介绍了Ganos H3的相关功能,帮助读者快速了解Ganos地理网格的重要特性与应用实践。H3是Uber研发的一种覆盖全球表面的二维地理网格,采用了一种全球统一的、多层次的六边形网格体系来表示地球表面,这种地理网格技术在诸多业务场景中得到广泛应用。Ganos不仅提供了H3网格的全套功能,还支持与其它Ganos时空数据类型进行跨模联合分析,极大程度提升了客户对于时空数据的挖掘分析能力。
|
SQL 存储 数据可视化
Ganos H3地理网格能力解析与最佳实践
Ganos H3地理网格是一种基于六边形结构的高效地理空间数据处理技术,适用于物流、社交网络、数据分析及应急响应等多种场景。Ganos H3利用独特的六边形网格体系实现更均匀的数据分布和固定邻居关系,优化了空间数据分析、路径规划等功能。Ganos地理网格引擎支持GeoSOT和H3两种网格,具备丰富的打码方式、高性能查询及聚合分析能力,并能与几何和栅格数据融合,大幅提升了数据处理效率和存储成本效益。借助Ganos H3,企业和开发者可以更好地管理和利用地理空间数据,提高位置相关决策的准确性和效率。
683 0
|
负载均衡 算法 容灾
slb基础概念
【9月更文挑战第2天】
4381 25
|
定位技术 索引
R-tree 总结
R-tree 总结
348 0
|
消息中间件 调度 RocketMQ
【RocketMQ系列六】RocketMQ事务消息
【RocketMQ系列六】RocketMQ事务消息
3411 1
|
消息中间件 存储 SQL
RocketMQ与Kafka架构深度对比
RocketMQ与Kafka架构深度对比
|
消息中间件 存储 运维
RocketMQ与Kafka深度对比:特性与适用场景解析
RocketMQ与Kafka深度对比:特性与适用场景解析
|
缓存 监控 Java
干货 | 2024 年 Elasticsearch 常见面试题集锦
干货 | 2024 年 Elasticsearch 常见面试题集锦
|
消息中间件 NoSQL 数据库
订单超时未支付自动取消--实现简述
订单超时未支付自动取消--实现简述
517 0