当前位置:首页 > 科技  > 软件

Spring的三种常见Bean的初始化参数机制,你都用对了吗?

来源: 责编: 时间:2023-12-01 17:14:09 347观看
导读大家好,我是G探险者。spring这本九阳神功秘籍,我们一点一滴去研读。在Spring框架中,Bean的实例化与初始化是一个复杂的过程,一个Bean的实例化过程往往伴随着一些属性的初始化动作,有的是在Bean实例化之后才进行的属性初始


P9V28资讯网——每日最新资讯28at.com

大家好,我是G探险者。P9V28资讯网——每日最新资讯28at.com

spring这本九阳神功秘籍,我们一点一滴去研读。P9V28资讯网——每日最新资讯28at.com

在Spring框架中,Bean的实例化与初始化是一个复杂的过程,一个Bean的实例化过程往往伴随着一些属性的初始化动作,有的是在Bean实例化之后才进行的属性初始化,有的是和Bean实例化同时进行他的属性初始化,spring提供了多种机制来控制和扩展这个过程来满足我们不通的场景需求。P9V28资讯网——每日最新资讯28at.com

今天我们就来聊一聊它的常见的三种机制:InitializingBean接口、BeanDefinitionRegistryPostProcessor接口和EnvironmentAware接口。看看它们的区别、使用场景以及如何使用。P9V28资讯网——每日最新资讯28at.com

InitializingBean接口
P9V28资讯网——每日最新资讯28at.com

作用: 当一个Bean实现了InitializingBean接口,Spring将在Bean的属性被初始化后调用afterPropertiesSet()方法。P9V28资讯网——每日最新资讯28at.com

使用场景: 当你需要在Bean的依赖属性被设置后执行一些初始化的代码时使用。例如,根据属性设置来初始化资源或者校验参数的合法性。P9V28资讯网——每日最新资讯28at.com

示例代码:P9V28资讯网——每日最新资讯28at.com

public class MyBean implements InitializingBean {    private String someProperty;    public void setSomeProperty(String someProperty) {        this.someProperty = someProperty;    }    @Override    public void afterPropertiesSet() throws Exception {        // 初始化代码    }}

BeanDefinitionRegistryPostProcessor接口

  • 作用: 允许在常规Bean实例化之前读取或修改Bean定义或添加新的Bean定义。
  • 使用场景: 用于在Spring容器启动阶段修改已有的Bean定义或者动态添加新的Bean定义。例如,根据特定条件动态注册Beans。
  • 示例代码:
public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {    @Override    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {        // 修改Bean定义或者注册新的Bean    }    @Override    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {        // 可以操作BeanFactory    }}

EnvironmentAware接口

  • 作用: 当Bean实现了EnvironmentAware接口,Spring容器在初始化该Bean时会调用setEnvironment()方法,传入当前的Environment对象。
  • 使用场景: 当你需要访问Spring应用的环境(如属性文件中的属性)时使用。例如,获取配置文件中的参数值。
  • 示例代码:
public class MyEnvironmentAwareBean implements EnvironmentAware {    private Environment environment;    @Override    public void setEnvironment(Environment environment) {        this.environment = environment;    }    // 使用environment获取配置等}

对比分析

特性/接口P9V28资讯网——每日最新资讯28at.com

InitializingBeanP9V28资讯网——每日最新资讯28at.com

BeanDefinitionRegistryPostProcessorP9V28资讯网——每日最新资讯28at.com

EnvironmentAwareP9V28资讯网——每日最新资讯28at.com

主要作用P9V28资讯网——每日最新资讯28at.com

Bean属性设置后的初始化操作P9V28资讯网——每日最新资讯28at.com

在常规Bean创建前修改或添加Bean定义P9V28资讯网——每日最新资讯28at.com

注入当前的Environment对象P9V28资讯网——每日最新资讯28at.com

使用场景P9V28资讯网——每日最新资讯28at.com

在Bean的依赖属性设置后执行初始化代码P9V28资讯网——每日最新资讯28at.com

动态修改或注册Beans,如根据条件动态注册P9V28资讯网——每日最新资讯28at.com

需要访问或根据Spring应用的环境参数进行操作P9V28资讯网——每日最新资讯28at.com

方法实现P9V28资讯网——每日最新资讯28at.com

实现afterPropertiesSet()方法P9V28资讯网——每日最新资讯28at.com

实现postProcessBeanDefinitionRegistry()和postProcessBeanFactory()方法P9V28资讯网——每日最新资讯28at.com

实现setEnvironment()方法P9V28资讯网——每日最新资讯28at.com

示例用途P9V28资讯网——每日最新资讯28at.com

根据依赖属性初始化资源或校验参数合法性P9V28资讯网——每日最新资讯28at.com

在应用启动阶段动态添加或修改Bean定义P9V28资讯网——每日最新资讯28at.com

获取配置文件中的参数值P9V28资讯网——每日最新资讯28at.com

与容器生命周期的关系P9V28资讯网——每日最新资讯28at.com

与单个Bean的生命周期密切相关P9V28资讯网——每日最新资讯28at.com

在Bean定义阶段介入,影响整个应用的Bean创建过程P9V28资讯网——每日最新资讯28at.com

与环境配置相关,可跨多个Bean使用P9V28资讯网——每日最新资讯28at.com

这个表格总结了这三个接口的主要特性、使用场景、方法实现、示例用途以及它们与Spring容器生命周期的关系,有助于理解每个接口的独特用途和实现方式。P9V28资讯网——每日最新资讯28at.com

在具体的使用中,选择适合的机制取决于你的具体需求。InitializingBean和EnvironmentAware更多用于单个Bean的初始化和环境参数访问,而BeanDefinitionRegistryPostProcessor用于更高级的应用场景,如全局地修改Bean定义或动态注册Beans。P9V28资讯网——每日最新资讯28at.com


P9V28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-35872-0.htmlSpring的三种常见Bean的初始化参数机制,你都用对了吗?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Python中的类属性 vs 实例属性

下一篇: 接口中的大事务,该如何进行优化?

标签:
  • 热门焦点
  • 一文看懂为苹果Vision Pro开发应用程序

    译者 | 布加迪审校 | 重楼苹果的Vision Pro是一款混合现实(MR)头戴设备。Vision Pro结合了虚拟现实(VR)和增强现实(AR)的沉浸感。其高分辨率显示屏、先进的传感器和强大的处理能力
  • 让我们一起聊聊文件的操作

    文件【1】文件是什么?文件是保存数据的地方,是数据源的一种,比如大家经常使用的word文档、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存数据,它既可以保
  • 三万字盘点 Spring 九大核心基础功能

    大家好,我是三友~~今天来跟大家聊一聊Spring的9大核心基础功能。话不多说,先上目录:图片友情提示,本文过长,建议收藏,嘿嘿嘿!一、资源管理资源管理是Spring的一个核心的基础功能,不
  • 一篇文章带你了解 CSS 属性选择器

    属性选择器对带有指定属性的 HTML 元素设置样式。可以为拥有指定属性的 HTML 元素设置样式,而不仅限于 class 和 id 属性。一、了解属性选择器CSS属性选择器提供了一种简单而
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • 华为Mate60标准版细节曝光:经典星环相机模组回归

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • iQOO 11S屏幕细节公布:首发三星2K E6全感屏 安卓最好的直屏手机

    日前iQOO手机官方宣布,新一代电竞旗舰iQOO 11S将会在7月4日19:00正式与大家见面。随着发布时间的日益临近,官方关于该机的预热也更加密集,截至目前已
  • 电博会上海尔智家模拟500平大平层,还原生活空间沉浸式体验

    电博会为了更好地让参展观众真正感受到智能家居的绝妙之处,海尔智家的程传岭先生同样介绍了展会上海尔智家的模拟500平大平层,还原生活空间沉浸式体验。程传
  • “买真退假” 这种“羊毛”不能薅

    □ 法治日报 记者 王春   □ 本报通讯员 胡佳丽  2020年初,还在上大学的小东加入了一个大学生兼职QQ群。群主“七王”在群里介绍一些刷单赚
Top