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

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

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


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

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

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

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

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

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

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

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

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

对比分析

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

标签:
  • 热门焦点
  • 俄罗斯:将审查iPhone等外国公司设备 保数据安全

    iPhone和特斯拉都属于在各自领域领头羊的品牌,推出的产品也也都是数一数二的,但对于一些国家而言,它们的产品可靠性和安全性还是在限制范围内。近日,俄罗斯联邦通信、信息技术
  • 摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • 一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • 让我们一起聊聊文件的操作

    文件【1】文件是什么?文件是保存数据的地方,是数据源的一种,比如大家经常使用的word文档、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存数据,它既可以保
  • 小红书1周涨粉49W+,我总结了小白可以用的N条涨粉笔记

    作者:黄河懂运营一条性教育视频,被54万人“珍藏”是什么体验?最近,情感博主@公主是用鲜花做的,火了!仅仅凭借一条视频,光小红书就有超过128万人,为她疯狂点赞!更疯狂的是,这
  • 华为HarmonyOS 4升级计划公布:首批34款机型今日开启公测

    8月4日消息,今天下午华为正式发布了HarmonyOS 4系统,在更流畅的前提下,还带来了不少新功能,UI设计也有变化,会让手机焕然一新。华为宣布,首批机型将会在
  • iQOO Neo8系列新品发布会

    旗舰双芯 更强更Pro
  • Android 14发布:首批适配机型公布

    5月11日消息,谷歌在今天凌晨举行了I/O大会,本次发布会谷歌带来了自家的AI语言模型PaLM 2、谷歌Pixel Fold折叠屏、谷歌Pixel 7a手机,同时发布了Androi
  • 2022爆款:ROG魔霸6 冰川散热系统持续护航

    喜逢开学季,各大商家开始推出自己的新产品,进行打折促销活动。对于忠实的端游爱好者来说,能够拥有一款梦寐以求的笔记本电脑是一件十分开心的事。但是现在的
Top