首页 > 其他分享 >bean 生命周期

bean 生命周期

时间:2024-10-16 14:10:00浏览次数:8  
标签:BeanPostProcessor 生命周期 -- Bean 接口 bean 方法

生命周期

  1. 实例化:通过反射调用构造方法创建 Bean 实例
  2. 属性赋值:把配置文件的值或 IOC 容器中的其他 bean 注入属性中
  3. 初始化:bean 进入初始化阶段,spring 提供了 3 种方式对 bean 加工处理
    • @PostConstruct 注解指定初始化方法
    • 实现 InitializingBean 接口,复写 afterPropertiesSet 方法
    • @Bean 注册 bean 可以通过 initMethod 属性指定初始化方法
  4. 使用:到此 bean 完整了,程序可使用
  5. 销毁:程序关闭,释放资源,销毁 bean
    • @PreDestroy 注解指定销毁方法
    • 实现 DisposableBean 接口,复写 destroy 方法
    • @Bean 注册 bean 可以通过 destroyMethod 属性指定销毁方法

完整流程

  • BeanPostProcessor 不能感知当前类
  • BeanPostProcessor 会拦截所有 bean
  • @Autowired 就是 BeanPostProcessor 实现的
@Component
public class User implements BeanPostProcessor {

    // 其他 bean 会进这个方法,User 的 bean 不会走!!!
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("Processing bean: " + beanName + " of type: " + bean.getClass().getName());
        if (bean instanceof Dog) {
            System.out.println("************************");
        }
        return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName);
    }
}
graph TD; st(start) --> io1[反射创建对象] io1 --> io2[属性赋值] io2 --> op1[Aware 感知接口回调] op1 --> op2[BeanPostProcessor 接口 postProcessBeforeInitialization 方法] op2 --> op3[@PostConstruct 标注的方法] op3 --> op4[InitializingBean 接口 afterPropertiesSet 方法] op4 --> op5[@Bean initMethod 指定的方法] op5 --> op6[BeanPostProcessor 接口 postProcessAfterInitialization 方法] op6 --> sub1[使用阶段] sub1 --> op7[@PreDestroy 标注的方法] op7 --> op8[DisposableBean 接口 destroy方法] op8 --> op9[@Bean destroyMethod 指定的方法] op9 --> e(end)

标签:BeanPostProcessor,生命周期,--,Bean,接口,bean,方法
From: https://www.cnblogs.com/cyrushuang/p/18469825

相关文章

  • spring上 -基于注解配置bean,动态代理,AOP笔记
     用的是jdk8,spring框架里jar包的下载可以自己搜到注解用到的jar包。  60,注解配置Bean快速入门 基本介绍 代码结构: UserDao.javapackagecom.hspedu.spring.component;importorg.springframework.stereotype.Repository;/**使用@Repository标识该......
  • Vue组件及组件化:深入解析与组件生命周期
    Vue组件及组件化:深入解析与组件生命周期Vue.js作为一款渐进式JavaScript框架,凭借其易用性、灵活性和高性能,在前端开发领域占据了一席之地。其中,组件化开发是Vue.js的核心特性之一,它极大地提高了代码的可复用性、可维护性和可测试性。本文将深入解析Vue组件及组件化的概念,并......
  • Java OOM (OutOfMemoryError) 的产生原因及解决方案(内存泄漏、内存溢出、对象生命周期
    在Java开发中,OutOfMemoryError(简称OOM)是常见的内存溢出错误,通常发生在Java虚拟机(JVM)无法分配所需内存时。OOM不仅仅意味着系统内存不足,它还可能由程序中的内存管理问题导致,如内存泄漏或资源未正确释放。本篇博客将全面、深入地分析OOM的产生原因,并给出有效的解决方案。1.O......
  • Java语言中1.方法调用栈 2.栈帧 3.局部变量表 4.操作数栈 5.动态链接 6.方法的入参存
    在Java语言中,理解方法调用栈、栈帧、局部变量表、操作数栈等概念非常重要,它们与方法的执行和内存管理密切相关。下面是对这些概念的详细解释及它们之间的关系:1.方法调用栈(MethodCallStack)方法调用栈是每个线程维护的一块内存区域,用于存储线程执行时的栈帧(每个栈帧对应一次......
  • 读数据工程之道:设计和构建健壮的数据系统03数据工程生命周期(上)
    1. 数据工程生命周期1.1. 数据领域正在经历新数据技术和实践的爆炸式增长,抽象程度和易用性不断提高1.2. 由于技术抽象程度的增加,数据工程师将越来越多地成为数据生命周期工程师,根据数据生命周期管理的原则来进行思考和操作1.3. 数据工程生命周期包括将原始数据成分转化......
  • SpringBoot基础(四):bean的多种加载方式
    SpringBoot基础系列文章SpringBoot基础(一):快速入门SpringBoot基础(二):配置文件详解SpringBoot基础(三):Logback日志SpringBoot基础(四):bean的多种加载方式目录一、xml配置文件二、注解定义bean1、使用AnnotationConfigApplicationContext对象加载2、加载本地类3、......
  • ModelMapper的常见用法 ,号称是beanUtils.copyProp....的升级版??,代码复制粘贴即可复现效
    官网案例以下将官网案例做一个解释1)快速入门递归遍历源对象的属性拷贝给目标对象拷贝对象下对象的属性值@DataclassOrder{privateCustomercustomer;privateAddressbillingAddress;}@DataclassCustomer{privateNamename;}@Dataclass......
  • 深入理解 : Spring BeanFactory
    深入理解:SpringBeanFactory1概述:SpringBeanFactory1.1什么是BeanFactory:SpringBean容器的抽象接口BeanFactory是Spring框架(spring-beans模块)中的一个接口,它是一个工厂类,用来创建和管理Spring中的Bean对象。BeanFactory接口定义了Spring容器的基本规范和行为,它......
  • [Java/Spring] 深入理解 : Spring BeanFactory / ApplicationContext、Environment、P
    PropertySource:解析环境资源及配置的底层组件org.springframework.core.env.PropertyResolverEnvironment:管理环境的配置与资源org.springframework.core.env.Environment其继承接口PropertyResolver属性解析器,用来解析不同属性源PropertySource里的key......
  • spring上 -基于Xml配置bean笔记
    4,Spring内容   7,快速入门 需求:通过Spring的方式[配置文件],获取JavaBean:Monster的对象,并给该的对象属性赋值,输出该对象信息.代码结构:lib目录是自己创建的,然后再引入5个jar包 源码:beans.xml<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="......