Spring中你一定要知道的afterPropertiesSet()

文章目录

  • 功能
  • 源码

功能

初始化bean执行的回调方法其一,它不像@PostConstruct一样可以有多个,只能调用一次;它执行的时机是在@PostConstruct之后,从它的名称也可以看出,他是在属性填充完,也就是bean初始化完后执行的回调方法。

注意:
如果afterPropertiesSet方法被@PostConstruct标注,那么它就指挥在@PostConstruct时机执行,且只会执行一次。

在开发中,常会使用在缓存的场景,对某一类数据进行缓存,或者需要在某一个bean完成初始化就需要执行的功能场景。

例如:

作为示例,下面代码不严谨,常量需要定义到常量表,可管理,然后缓存尽量不要永久缓存,需要设置过期事件

@Component
@AllArgsConstructor
@Transactional(rollbackFor = Exception.class)
public class TableServiceImpl extends ServiceImpl<TableMapper, Table> implements TableService, InitializingBean {private final StringRedisTemplate redisTemplate;@Overridepublic void afterPropertiesSet() throws Exception {List<Table> list = this.list();if (list.isEmpty()) {return;}redisTemplate.opsForValue().set("pro:table", JSONUtil.toJsonPrettyStr(list));}
}

源码

上面提到,回调执行时机是在bean初始化完后,那么直接定位:

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#initializeBean(java.lang.String, java.lang.Object, org.springframework.beans.factory.support.RootBeanDefinition)

在这里插入图片描述

下面这段就是afterPropertiesSet方法执行的逻辑,最终执行是通过接口InitializingBean直接调用;

AccessController.doPrivileged是提供了方法资源的特权,可以不用理会;

注意:

mbd.isExternallyManagedInitMethod("afterPropertiesSet")判断的是afterPropertiesSet不是@PostConstruct标注的方法之一,如果是,就直接跳过不执行,所以需要注意
image-20231222211122215

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/239413.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实力强的大模型都有哪些超能力?

实力强的大模型都有哪些超能力&#xff1f; 前几日&#xff0c;人工智能研究公司OpenAI CEO山姆奥特曼&#xff08;Sam Altman&#xff09;在谈及人工智能这项技术的潜力以及人们对它的担忧时&#xff0c;曾表示“AI发展速度快得吓人&#xff0c;就像停不下来的龙卷风。”可见&…

如何使用 NFTScan NFT API 在 Base 网络上开发 Web3 应用

Base 是 Coinbase 使用 OP Stack 开发的最新以太坊第 2 层&#xff08;L2&#xff09;网络&#xff0c;用于解决以太坊等主要区块链面临的可扩展性和成本挑战。Coinbase 将其描述为“安全、低成本、对开发人员友好的以太坊 L2&#xff0c;旨在将下一个 10 亿用户带入 Web3”。B…

一个抖店内做几个商品链接比较合适?解答下新手问题,建议收藏

我是王路飞。 一个抖店内的商品链接数量&#xff0c;是多一些比较好还是少一些比较好呢&#xff1f; 可能在大多数人看来&#xff0c;当然是多一些比较好了&#xff0c;商品数量更多&#xff0c;基数增加&#xff0c;也能承载更多的进店流量&#xff0c;增加下单几率。 但真…

【Kotlin】一款专门为 Java 程序员打造的快速掌握 Kotlin 技术博客

目录 初识 Kotlin 历史 工作原理 第一个Hello World&#xff01; Kotlin 语法 变量 基本数据类型 函数 和 选择控制&#xff08;if、when&#xff09; if when 循环语句 类和对象 创建和使用 继承 构造 主构造 次构造 接口 定义 实现 权限修饰符 数据类…

测试基础知识总结

什么是软件测试&#xff1f; 答&#xff1a;软件测试是为了软件的产品特性是否满足用户的需求&#xff1b;因为企业的利益与用户直接关联。 调试和测试的区别 ①目的不同 调试&#xff1a;发现并解决软件中存在的缺陷 测试&#xff1a;发现软件中存在的缺陷 ②人员不同 调试&a…

VBA_MF系列技术资料1-247

MF系列VBA技术资料 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧&#xff0c;我参考大量的资料&#xff0c;并结合自己的经验总结了这份MF系列VBA技术综合资料&#xff0c;而且开放源码&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-04属于定…

在线客服系统推荐:优质选择助您提升客户服务体验

大部分企业依靠在线客服系统和客户达成联系&#xff0c;他为客户和企业之间建立了有效的沟通桥梁。市场上这么多的在线客服系统哪个好呢&#xff1f; 1、明确自己的需求。 这一点是最重要的&#xff0c;要先明确公司使用客服系统是想做售前咨询还是售后服务。不同的需求相对应…

鸿蒙开发之hdc命令行

一、简介 hdc&#xff08;HarmonyOS Device Connector&#xff09;是HarmonyOS为开发人员提供的用于调试的命令行工具&#xff0c;通过该工具可以在windows/linux/mac系统上与真实设备进行交互。 二、环境准备 hdc工具通过HarmonyOS SDK获取&#xff0c;存放于SDK的toolchai…

自然语言处理阅读第三弹

LLM微调 三种方法 Prefix-Tuning/Prompt-Tuning:在模型的输入或隐层添加k个额外可训练的前缀tokens(这些前缀是连续的伪tokens,不对应真实的tokens),只训练这些前缀参数; Prefix-tuning: 对于每个任务,都有一个特定的前缀被添加到输入序列的开始部分。这些前缀相当于任务特…

JavaScript高级 函数进阶篇

函数进阶 1、函数的定义和调用 函数声明方式function关键字&#xff08;命名函数&#xff09;&#xff1b;函数表达式&#xff08;匿名函数&#xff09;&#xff1b;new Function()&#xff08;此处的Function()是一个构造函数&#xff09;&#xff1b;var fn new Function(参…

六个探索性数据分析(EDA)工具,太实用了!

当进行数据分析时&#xff0c;探索性数据分析(EDA)是一个至关重要的阶段&#xff0c;它能帮助我们从数据中发现模式、趋势和异常现象。而选择合适的EDA工具又能够极大地提高工作效率和分析深度。在本文中&#xff0c;笔者将介绍6个极其实用的探索性数据分析(EDA)工具&#xff0…

和宝贝一起迎接冬日里的浪漫~优雅有气质

闪闪发光的刺绣亮片面料 自带闪光&#xff0c;是低调而浪漫的存在 蓬松拼接多层网纱 自带裙撑效果的网纱裙摆唯美飘逸 仿佛冬日里的小公主 热烈轻快的奔向即将到来的节日庆典

Go和Java实现简单工厂模式

Go和Java实现简单工厂模式 本文通过计算器案例来说明简单工厂模式的使用&#xff0c;使用Go语言和Java语言实现。 1、简单工厂模式 简单工厂模式对对象创建管理方式最为简单&#xff0c;只需要创建一个简单的工厂类然后在里面创建对象&#xff0c;该模式通过向工 厂传递类型…

自媒体人福音,正版实用的视频素材网站~

大家平时在创作视频的时候&#xff0c;有没有苦恼过找不到合适的素材呢&#xff1f;网上能找到的大部分素材都是有版权的&#xff0c;不能随便乱用。今天我就来给大家推荐一些用于视频创作的正版素材网站&#xff0c;快快收藏吧! 1.制片帮素材 链接&#xff1a;stock.zhipianb…

【洛谷】分糖果

分糖果 题目链接 题意 输出你最多能获得多少作为你搬糖果的奖励的糖果数量 思路 我们知道如果糖果总数除以小朋友的数量取商为一的话&#xff0c;那么每个小朋友只能得到一颗糖&#xff0c;那么它的余数就是剩下的糖果&#xff0c;也就是你能获得的奖励。弄清楚n&#xff0c;…

Python实现广义最小二乘法线性回归模型(GLS算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 广义最小二乘法&#xff08;Generalized Least Squares&#xff09;是一种回归分析方法&#xff0c;适…

你知道海外云手机可以用于外贸测评吗?

目前随着外贸行业的发展&#xff0c;像亚马逊、速卖通、eBay等海外电商平台越来越火热。在这些平台&#xff0c;过硬的产品质量、优秀的服务、合适的价格&#xff0c;再加上适量的跨境电商测评&#xff0c;很容易就能吸引不少的客户。那么如何利用海外云手机进行外贸测评&#…

Python爬取电影天堂

前言&#xff1a; 本文非常浅显易懂&#xff0c;可以说是零基础也可快速掌握。如有疑问&#xff0c;欢迎留言&#xff0c;笔者会第一时间回复。 一、爬虫的重要性&#xff1a; 如果把互联网比喻成一个蜘蛛网&#xff0c;那么Spider就是在网上爬来爬去的蜘蛛。网络蜘蛛通过网页的…

C语言中的#pragma预处理指令

C语言中的#pragma预处理指令 C语言中的#pragma预处理指令 C语言中的#pragma预处理指令一. pragma预处理指令概念二. pragma预处理指令的作用三. 预处理指令的参数1&#xff09;message参数2&#xff09;code_seg参数3&#xff09;once参数4&#xff09;pack参数5&#xff09; s…

司铭宇老师《营销总监培训课程》内容

在今天这个竞争激烈的商业环境中&#xff0c;作为一家公司的营销总监&#xff0c;你是否感到压力重重&#xff1f;你是否在寻找一种方式来提升你的销售业绩&#xff0c;激发你的团队潜力&#xff0c;并在市场中占据优势&#xff1f;如果你的答案是肯定的&#xff0c;营销总监作…