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

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

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


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

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

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

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

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

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

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

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

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

对比分析

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

标签:
  • 热门焦点
  • 7月安卓手机性价比榜:努比亚+红魔两款新机入榜

    7月登场的新机有努比亚Z50S Pro和红魔8S Pro,除了三星之外目前唯二的两款搭载超频版骁龙8Gen2处理器的产品,而且努比亚和红魔也一贯有着不错的性价比,所以在本次的性价比榜单
  • 线程通讯的三种方法!通俗易懂

    线程通信是指多个线程之间通过某种机制进行协调和交互,例如,线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中,线程等待和通知的实现手段有以下几种方式:Object 类下
  • 使用Webdriver-manager解决浏览器与驱动不匹配所带来自动化无法执行的问题

    1、前言在我们使用 Selenium 进行 UI 自动化测试时,常常会因为浏览器驱动与浏览器版本不匹配,而导致自动化测试无法执行,需要手动去下载对应的驱动版本,并替换原有的驱动,可能还
  • Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein“利用市场支配力量强迫服装厂商与之签订独家
  • 破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • 10天营收超1亿美元,《星铁》比《原神》差在哪?

    来源:伯虎财经作者:陈平安即便你没玩过《原神》,你一定听说过的它的大名。恨它的人把《原神》开服那天称作是中国游戏史上最黑暗的一天,有粉丝因为索尼在PS平台上线《原神》,怒而
  • 大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • iQOO Neo8 Pro抢先上架:首发天玑9200+ 安卓性能之王

    经过了一段时间的密集爆料,昨日iQOO官方如期对外宣布:将于5月23日推出全新的iQOO Neo8系列新品,官方称这是一款拥有旗舰级性能调校的作品。随着发布时
Top