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

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

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


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

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

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

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

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

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

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

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

示例代码:lrT28资讯网——每日最新资讯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获取配置等}

对比分析

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

标签:
  • 热门焦点
  • 卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    在今天的Redmi后性能时代战略发布会结束之后,Redmi总经理卢伟冰又带来了一篇长文,详解了为什么 Redmi 要开启后性能时代?为什么选择和 MediaTek、Pixelworks 深度合作?以及后性
  • 如何使用JavaScript创建一只图像放大镜?

    如何使用JavaScript创建一只图像放大镜?

    译者 | 布加迪审校 | 重楼如果您曾经浏览过购物网站,可能遇到过图像放大功能。它可以让您放大图像的特定区域,以便浏览。结合这个小小的重要功能可以大大改善您网站的用户体验
  • 微信语音大揭秘:为什么禁止转发?

    微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    来源:极点商业作者:杨铭在淘宝购买珠宝玉石后,因为保证金不够赔付,店铺关闭,退货退款难、维权无门的比比皆是。“提供相关产品鉴定证书,支持全国复检,可以30天无理由退换货。&
  • 阿里大调整

    阿里大调整

    来源:产品刘有媒体报道称,近期淘宝天猫集团启动了近年来最大的人力制度改革,涉及员工绩效、层级体系等多个核心事项,目前已形成一个初步的“征求意见版”:1、取消P序列
  • 年轻人的“职场羞耻感”,无处不在

    年轻人的“职场羞耻感”,无处不在

    作者:冯晓亭 陶 淘 李 欣 张 琳 马舒叶来源:燃次元“人在职场,应该选择什么样的着装?”近日,在网络上,一个与着装相关的帖子引发关注,在该帖子里,一位在高级写字楼亚洲金
  • 支持aptX Lossless无损传输 iQOO TWS 1赛道版发布限时优惠价369元

    支持aptX Lossless无损传输 iQOO TWS 1赛道版发布限时优惠价369元

    2023年7月4日,“无损音质,声动人心”iQOO TWS 1正式发布,支持aptX Lossless无损传输,限时优惠价369元。iQOO TWS 1耳机率先支持端到端aptX Lossless无
  • 由于成本持续增加,笔记本产品价格预计将明显上涨

    由于成本持续增加,笔记本产品价格预计将明显上涨

    根据知情人士透露,由于材料、物流等成本持续增加,笔记本产品价格预计将在2021年下半年有明显上涨。进入6月下旬以来,全球半导体芯片缺货情况加剧,显卡、处理器
  • Meta盲目扩张致超万人被裁,重金押注元宇宙而前景未明

    Meta盲目扩张致超万人被裁,重金押注元宇宙而前景未明

    图片来源:图虫创意日前,Meta创始人兼CEO 马克·扎克伯发布公开信,宣布Meta计划裁员超11000人,占其员工总数13%。他公开承认了自己的预判失误:“不仅
Top