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

相关文章
|
7月前
|
安全 Java
JVM的类的生命周期
JVM的类的生命周期
|
7月前
|
XML Java 数据格式
SpringBean的生命周期
SpringBean的生命周期
72 0
|
Java 程序员 Spring
一文读懂 Bean的生命周期
一文读懂 Bean的生命周期
137 0
|
Java Spring 容器
Spring源码:Bean的生命周期(二)
FactoryBean 和 BeanFactory 是两个不同的概念。前者是一个接口,我们可以在实现该接口时通过调用 getObject 方法来返回实例,同时 FactoryBean 本身也是一个实例。后者是 Spring 容器的工厂,通过其中的 bean 定义 Map 一个一个地实例化我们通过注解等方式注入进去的 bean 工厂。在判断 FactoryBean 时,如果当前 BeanFactory 中没有对应的 bean 定义,那么就会去父容器中寻找相应的 bean 定义并进行判断。如果我们的类实现了 SmartFactoryBean 接口,那么它将会在 Spring 容器启动时就会调用 g
|
存储 缓存 Java
Spring源码:Bean生命周期(三)
在之前的文章中,我们已经对 `bean` 的准备工作进行了讲解,包括 `bean` 定义和 `FactoryBean` 判断等。在这个基础上,我们可以更加深入地理解 `getBean` 方法的实现逻辑,并在后续的学习中更好地掌握`createBean` 方法的实现细节。
Spring源码:Bean生命周期(三)
|
7月前
|
存储 Java 程序员
【JVM系列笔记】类生命周期
类的生命周期包括加载、连接(验证、准备、解析)、初始化、使用和卸载五个阶段。加载时,类加载器根据全限定名获取字节码,然后在方法区中创建InstanceKlass对象,并在堆上生成对应的Class对象。连接阶段验证字节码的正确性,准备阶段为静态变量分配内存并赋初始值,解析阶段将符号引用转换为直接引用。初始化阶段执行clinit方法,如静态变量赋值和静态代码块。类的初始化在访问静态成员、使用Class.forName、创建类实例或其子类时触发。
98 1
|
XML Java 测试技术
Spring源码:bean的生命周期(一)
Spring的Bean定义环节是Spring IoC容器中的核心流程之一。在这个过程中,Spring会扫描指定的包路径,找到符合条件的Bean,并将其转换为Bean定义。在这个过程中,Spring使用了ASM技术来解析类的注解信息,判断当前类是否符合要求。然后,Spring将符合条件的Bean定义加入到候选集合中,并对其进行唯一标识命名、默认值赋值、常见定义注解的解析等操作。最后,Spring使用合并的Bean定义来包装原始的Bean定义,以便在Bean实例化的过程中进行更好的管理和控制。
Spring源码:bean的生命周期(一)
|
XML Java 数据格式
Spring源码:Bean生命周期(五)
在今天的文章中,我们将深入探讨 Bean 的属性注入和初始化流程,从而使其成为一个真正意义上的 Bean。这个过程包括属性注入、Aware 接口回调、BeanPostProcessor 的前置和后置处理等多个步骤,通过本文的学习,读者将能够更深入地了解 Spring 框架中 Bean 的属性注入和初始化过程,为后续的学习和实践打下坚实的基础。
|
缓存 前端开发 Java
Spring源码:Bean生命周期(四)
在本文中,我们深入探讨了 Spring 框架中 Bean 的实例化过程,关于某些细节以后我会单独拿出一篇文章单独讲解,我们来总结下实例化都做了哪些事情:先从bean定义中加载当前类,因为最初Spring使用ASM技术解析元数据时只获取了当前类的名称寻找所有InstantiationAwareBeanPostProcessors实现类,并调用实例化前的方法postProcessBeforeInstantiation进行实例化,这里会使用构造方法进行实例化调用applyMergedBeanDefinitionPostProcessors找到所有MergedBeanDefinitionPostPro
|
存储 安全 Java
一文解读类的加载过程(类的生命周期)(上)
一文解读类的加载过程(类的生命周期)