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

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

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


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

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

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

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

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

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

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

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

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

对比分析

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

标签:
  • 热门焦点
  • MIX Fold3包装盒泄露 新机本月登场

    小米的全新折叠屏旗舰MIX Fold3将于本月发布,近日该机的真机包装盒在网上泄露。从图上来看,新的MIX Fold3包装盒在外观设计方面延续了之前的方案,变化不大,这也是目前小米旗舰
  • 0糖0卡0脂 旭日森林仙草乌龙茶优惠:15瓶到手29元

    旭日森林无糖仙草乌龙茶510ml*15瓶平时要卖为79.9元,今日下单领取50元优惠券,到手价为29.9元。产品规格:0糖0卡0脂,添加草本仙草汁,清凉爽口,富含茶多酚,保留
  • JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • 破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 自研Exynos回归!三星Galaxy S24系列将提供Exynos和骁龙双版本

    年初,全新的三星Galaxy S23系列发布,包含Galaxy S23、Galaxy S23+和Galaxy S23 Ultra三个版本,全系搭载超频版骁龙8 Gen 2,虽同样采用台积电4nm工艺制
  • 2299元起!iQOO Pad明晚首销:性能最强天玑平板

    5月23日,iQOO如期举行了新品发布会,除了首发安卓最强旗舰处理器的iQOO Neo8系列新机外,还在发布会上推出了旗下首款平板电脑——iQOO Pad,其最大的卖点
  • 回归OPPO两年,一加赢了销量,输了品牌

    成为OPPO旗下主打性能的先锋品牌后,一加屡创佳绩。今年618期间,一加手机全渠道销量同比增长362%,凭借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
  • 与兆芯合作 联想推出全新旗舰版笔记本电脑开天N7系列

    联想与兆芯合作推出全新联想旗舰版笔记本电脑开天 N7系列。这个系列采用兆芯KX-6640MA处理器平台,KX-6640MA 处理器是采用了陆家嘴架构,16nm 工艺,4 核 4 线
Top