Spring窥探系列之Bean生命周期(100%GPT生成版)

这篇具有很好参考价值的文章主要介绍了Spring窥探系列之Bean生命周期(100%GPT生成版)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

生命周期概览

Spring Bean 的生命周期可以分为以下阶段:

  1. 实例化:Spring 容器根据 Bean 的定义创建一个 Bean 的实例。这个阶段主要涉及 Bean 的实例化和依赖注入。

    相关类:InstantiationAwareBeanPostProcessor、BeanFactoryPostProcessor、BeanPostProcessor、BeanWrapper、DefaultListableBeanFactory 等。

  2. 属性赋值:所有的 Bean 属性被设置为配置值或者默认值,这个阶段主要涉及 Bean 的属性填充。

    相关类:InstantiationAwareBeanPostProcessor、BeanFactoryPostProcessor、BeanPostProcessor、BeanWrapper、DefaultListableBeanFactory 等。

  3. 初始化前:调用 @PostConstruct 和 InitializingBean 的实现方法,以及自定义的初始化方法。

    相关类:InstantiationAwareBeanPostProcessor、BeanFactoryPostProcessor、BeanPostProcessor、InitializingBean、AbstractAutowireCapableBeanFactory 等。

  4. 初始化后:调用 BeanPostProcessor 的 postProcessAfterInitialization 方法,以及自定义的初始化方法。

    相关类:InstantiationAwareBeanPostProcessor、BeanFactoryPostProcessor、BeanPostProcessor、AbstractAutowireCapableBeanFactory 等。

  5. 销毁前:调用 @PreDestroy 和 DisposableBean 的实现方法,以及自定义的销毁方法。

    相关类:DisposableBean、AbstractAutowireCapableBeanFactory 等。

  6. 销毁:Spring 容器销毁 Bean 对象,释放资源。

    相关类:DisposableBean、AbstractAutowireCapableBeanFactory 等。

其中,InstantiationAwareBeanPostProcessor、BeanFactoryPostProcessor、BeanPostProcessor 是 Spring Framework 中常用的扩展点,用于在 Bean 的生命周期中拦截和处理 Bean 对象。AbstractAutowireCapableBeanFactory 是 Spring Framework 中的一个重要实现类,实现了 Bean 对象的创建、属性注入、初始化和销毁等功能。DefaultListableBeanFactory 则是 AbstractAutowireCapableBeanFactory 的子类,实现了 Bean 的注册和查找等功能。

主要类的作用和常用方法的详细说明

  1. BeanFactoryPostProcessor 接口

该接口的作用是在 Spring 容器初始化之后,但是在 Bean 实例化之前,对 BeanFactory 进行修改。它提供了一个方法 postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory),该方法可以实现对 BeanFactory 的配置元数据进行修改,例如添加新的 BeanDefinition 等。

常用方法:

  • postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory): 该方法在 BeanFactory 标准初始化之后、任何 bean 被实例化之前被调用。可以通过该方法修改 BeanFactory 的配置元数据,例如添加新的 BeanDefinition 等。
  1. BeanPostProcessor 接口

该接口的作用是在 Spring 容器完成 Bean 实例化和属性注入之后,但是在调用 Bean 的初始化方法之前和之后,对 Bean 实例进行自定义的初始化和销毁操作。它提供了两个方法 postProcessBeforeInitialization(Object bean, String beanName)postProcessAfterInitialization(Object bean, String beanName),分别对应 Bean 初始化前和初始化后的操作。

常用方法:

  • postProcessBeforeInitialization(Object bean, String beanName): 该方法在 Bean 对象实例化后、依赖注入完成后、初始化方法调用之前被调用。可以在该方法中自定义 Bean 对象的初始化逻辑。

  • postProcessAfterInitialization(Object bean, String beanName): 该方法在 Bean 对象实例化后、依赖注入完成后、初始化方法调用之后被调用。可以在该方法中自定义 Bean 对象的销毁逻辑。

  1. InstantiationAwareBeanPostProcessor 接口

该接口继承了 BeanPostProcessor 接口,增加了对 Bean 实例化前的处理方法 postProcessBeforeInstantiation(Class<?> beanClass, String beanName) 和对属性进行修改的方法 postProcessPropertyValues(PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName)

常用方法:

  • postProcessBeforeInstantiation(Class<?> beanClass, String beanName): 该方法在 Bean 对象实例化之前被调用,可以在该方法中返回一个代理对象来替代原始的 Bean 对象实例。

  • postProcessAfterInstantiation(Object bean, String beanName): 该方法在 Bean 对象实例化之后、依赖注入完成之后、初始化方法调用之前被调用。可以在该方法中告知 Spring 容器是否需要继续对该 Bean 对象进行属性注入和初始化等操作。

  • postProcessPropertyValues(PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName): 该方法在 Bean 对象的属性填充之后、初始化方法调用之前被调用。可以在该方法中修改 Bean 对象的属性值。

  1. InitializingBean 接口

该接口提供了一个方法 afterPropertiesSet(),在 Bean 对象的所有属性被设置完毕之后调用。可以在该方法中自定义 Bean 对象的初始化逻辑。

常用方法:

  • afterPropertiesSet(): 该方法在 Bean 对象的所有属性被设置完毕之后调用。可以在该方法中自定义 Bean 对象的初始化逻辑。
  1. DisposableBean 接口

该接口提供了一个方法 destroy(),在 Bean 对象被销毁之前调用。可以在该方法中自定义 Bean 对象的销毁逻辑。

常用方法:

  • destroy(): 该方法在 Bean 对象被销毁之前调用。可以在该方法中自定义 Bean 对象的销毁逻辑。
  1. AbstractAutowireCapableBeanFactory

该类是 Spring Bean Factory 的一个抽象实现,提供了创建 Bean 对象、属性注入、初始化和销毁等方法的默认实现,可以用于定制自己的 Bean Factory 实现。

常用方法:

  • createBean(Class<T> beanClass): 根据指定的类型创建一个 Bean 对象。

  • doCreateBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args): 根据指定的 BeanDefinition 和构造函数参数创建一个 Bean 对象。

  • applyBeanPostProcessorsBeforeInitialization(Object existingBean, String beanName): 在 Bean 的初始化方法调用之前,对 Bean 进行后置处理。

  • applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName): 在 Bean 的初始化方法调用之后,对 Bean 进行后置处理。

  • destroyBean(Object bean): 销毁指定的 Bean 对象,包括调用 DisposableBean 接口的 destroy() 方法和自定义的销毁逻辑。

  1. AbstractBeanFactory

该类是 BeanFactory 接口的抽象实现,提供了创建 Bean 对象、获取 Bean 对象、Bean 的生命周期管理等方法的默认实现。

常用方法:

  • containsBean(String name): 判断是否存在指定名称的 Bean 对象。

  • getType(String name): 获取指定名称的 Bean 对象的类型。

  • getBean(String name): 根据指定名称获取一个 Bean 对象。

  • getBean(String name, Class<T> requiredType): 根据指定名称和类型获取一个 Bean 对象。

  • getBeanDefinition(String beanName): 获取指定名称的 BeanDefinition 对象。

  • registerSingleton(String name, Object singletonObject): 注册一个单例 Bean 对象。

  • destroySingletons(): 销毁所有的单例 Bean 对象,包括调用 DisposableBean 接口的 destroy() 方法和自定义的销毁逻辑。

  1. ConfigurableBeanFactory 接口

该接口是 BeanFactory 接口的子接口,增加了对 Bean 的生命周期管理的方法,例如添加 BeanPostProcessor、添加 BeanFactoryPostProcessor 等。

常用方法:

  • addBeanPostProcessor(BeanPostProcessor beanPostProcessor): 添加一个 BeanPostProcessor。

  • addBeanFactoryPostProcessor(BeanFactoryPostProcessor beanFactoryPostProcessor): 添加一个 BeanFactoryPostProcessor。

  • registerAlias(String beanName, String alias): 注册一个 Bean 别名。

  1. ApplicationContext 接口

该接口是 Spring 应用上下文的核心接口,扩展了 BeanFactory 接口,提供了更多的应用上下文级别的功能,例如事件发布、国际化支持等。

常用方法:

  • getBean(String name): 根据指定名称获取一个 Bean 对象。

  • getBean(Class<T> requiredType): 根据指定类型获取一个 Bean 对象。

  • publishEvent(ApplicationEvent event): 发布一个应用事件。

  • getMessage(String code, Object[] args, String defaultMessage, Locale locale): 获取国际化信息。

释疑

InstantiationAwareBeanPostProcessorBeanPostProcessor 接口的主要区别在于方法的调用时机和提供的回调方法的不同。

BeanPostProcessor 接口提供了两个回调方法 postProcessBeforeInitializationpostProcessAfterInitialization,用于在 Bean 初始化前和初始化后对 Bean 进行自定义的初始化和销毁操作。

InstantiationAwareBeanPostProcessor 接口继承了 BeanPostProcessor 接口,并且提供了三个额外的回调方法,用于在 Bean 实例化前、实例化后和属性填充后对 Bean 进行自定义的处理:

  • postProcessBeforeInstantiation: 在 Bean 实例化之前调用,可以返回一个代理对象来替代原始的 Bean 对象实例。

  • postProcessAfterInstantiation: 在 Bean 实例化之后、依赖注入完成之后、初始化方法调用之前被调用。可以在该方法中告知 Spring 容器是否需要继续对该 Bean 对象进行属性注入和初始化等操作。

  • postProcessPropertyValues: 在 Bean 对象的属性填充之后、初始化方法调用之前被调用。可以在该方法中修改 Bean 对象的属性值。

因此,相较于 BeanPostProcessor 接口,InstantiationAwareBeanPostProcessor 接口提供了更多的回调方法,使得我们可以在更多的时机进行自定义的处理。一般情况下,如果只需要在 Bean 的初始化前和初始化后进行自定义的处理,可以直接实现 BeanPostProcessor 接口;如果需要在更多的时机进行自定义处理,可以实现 InstantiationAwareBeanPostProcessor 接口。文章来源地址https://www.toymoban.com/news/detail-555820.html

到了这里,关于Spring窥探系列之Bean生命周期(100%GPT生成版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【SpringBoot系列】Spring Boot Bean Factory的生命周期 Spring Boot学习大纲,可以留言自己想了解的技术点

    继续完成既定的任务,走起 可以概括为以下步骤: 资源加载:Spring Boot 应用程序启动时,会扫描指定的路径,加载配置文件和类文件等资源。 配置加载:Spring Boot 会根据配置文件(比如 application.properties)中的配置,创建一个 Environment 对象,用于保存应用程序的配置信息。

    2024年02月05日
    浏览(50)
  • 【Spring】—— bean生命周期

    1、初始化容器 1)创建对象(分配内存) 2)执行构造方法 3)执行属性注入(set操作) 4)执行bean初始化方法 2、使用bean 1)执行业务操作 3、关闭/销毁容器 1)执行bean销毁方法

    2024年02月02日
    浏览(34)
  • Spring bean 生命周期

    在互联网领域中,Spring框架扮演着重要的角色。作为一个开源的Java应用程序开发框架,Spring提供了一种灵活而强大的方式来构建可扩展的应用程序。Spring框架中的一个重要概念是Bean,它是Spring应用程序的基本构建块之一。了解Spring Bean的生命周期对于充分利用Spring框架的功能

    2024年02月11日
    浏览(35)
  • Spring:Bean生命周期

    Bean 生命周期 是 bean 对象从创建到销毁的整个过程。 简单的 Bean 生命周期的过程: 1.实例化(调用构造方法对 bean 进行实例化) 2.依赖注入(调用 set 方法对 bean 进行赋值) 3.初始化(手动配置 xml 文件中 bean 标签的 init-method 属性值,来指定调用对应的初始化方法) 4.使用

    2024年02月13日
    浏览(31)
  • 【Spring】Bean的作用域与生命周期详情:请简述Spring的执行流程并分析Bean的生命周期?

     我们都知道,Spring框架为开发人员提供了很多便捷,这使得开发人员能够更加专注于应用程序的核心业务逻辑,而不需要花费大量时间和精力在技术细节上。作为一个包含众多工具方法的IoC容器,存取JavaBean是其极为重要的一个环节。本文就对Spring中的Bean的作用域和生命周

    2024年02月12日
    浏览(38)
  • 【spring】spring bean的生命周期

    spring bean的生命周期 简介 本文测试并且介绍了spring中bean的生命周期,如果只想知道结果可以跳到最后一部分直接查看。 一、bean的创建阶段 spring中的bean是何时创建的? 在spring中有一个非常重要的注解,叫做**@Scope**,这个注解是用来控制spring中的bean是否是单例的,一般情况

    2024年02月15日
    浏览(35)
  • Spring -- Bean的生命周期

    Spring容器在进行实例化时,会将xml配置的bean的信息封装成一个BeanDefinition对象,Spring根据BeanDefinition来创建Bean对象,里面有很多的属性用来描述Bean   BeanDefinition 中几个重要方法如下 beanClassName:bean 的类名 initMethodName:初始化方法名称 properryValues:bean 的属性值 scope:作用域

    2024年02月15日
    浏览(39)
  • Spring Bean的生命周期

    Bean生命周期的整个执行过程描述如下: 1、根据配置情况调用Bean构造方法或工厂方法实例化 Bean。 2、利用依赖注入完成Bean中所有属性值的配置注入。 3、如果Bean 实现了BeanNameAware 接口,则 Spring调用Bean的setBeanName()方法传入当前Bean的id值。 4、如果Bean实现了BeanFactoryAware 接口

    2023年04月22日
    浏览(53)
  • 【Spring】Spring的Bean的生命周期

    作者简介:大家好,我是五度鱼,一个普通的Java领域博主,不停输出Java技术博客和干货 。 座右铭:锲而不舍,金石可镂 。 个人主页:五度鱼学Java的主页 在 Java 中, Bean 是一个重要的概念,它代表了应用程序中的一个对象。在开发中,我们经常使用 Bean 来管理对象的生命

    2024年01月16日
    浏览(40)
  • Spring整理-Spring Bean的生命周期

    Spring Bean的生命周期涉及多个阶段,从Bean的定义到其销毁。在这个过程中,Spring容器负责创建、初始化、使用和最终销毁Bean。了解这个生命周期有助于更好地管理Bean的行为和资源使用。 实例化(Instantiation): 容器首先创建Bean的实例。 填充属性(Populate Properties): 容器

    2024年01月21日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包