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.hqwc.cn/news/293790.html

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

相关文章

Backtrader 文档学习-Data Feeds(下)

Backtrader 文档学习-Data Feeds&#xff08;下&#xff09; 1. Data Resampling 当数据仅在单个时间范围内可用&#xff0c;需要在不同的时间范围内进行分析时&#xff0c;就需要进行一些重采样。 “重采样”实际上应该称为“上采样”&#xff0c;因为它是从一个源时间区间到…

计算机网络:应用层

0 本节主要内容 问题描述 解决思路 1 问题描述 不同的网络服务&#xff1a; DNS&#xff1a;用来把人们使用的机器名字&#xff08;域名&#xff09;转换为 IP 地址&#xff1b;DHCP&#xff1a;允许一台计算机加入网络和获取 IP 地址&#xff0c;而不用手工配置&#xff1…

N字形变换(麻烦的方法)

class Solution:def convert(self, s: str, numRows: int) -> str:#先判断z有多少隔开s_new""index_now0if len(s)<numRows or numRows1:return sfor i in range(numRows-1,-1,-1):exchange0index_exchangeindex_nows_news[index_now]#计算每一层的差距gap_but…

10、基于LunarLander登陆器的Dueling DDQN强化学习(含PYTHON工程)

10、基于LunarLander登陆器的Dueling DDQN强化学习&#xff08;含PYTHON工程&#xff09; LunarLander复现&#xff1a; 07、基于LunarLander登陆器的DQN强化学习案例&#xff08;含PYTHON工程&#xff09; 08、基于LunarLander登陆器的DDQN强化学习&#xff08;含PYTHON工程…

华为鸿蒙开发适合哪些人学习?

随着鸿蒙系统的崛起&#xff0c;越来越多的人开始关注鸿蒙开发&#xff0c;并希望成为鸿蒙开发者。然而&#xff0c;鸿蒙开发并不适合所有人&#xff0c;那么哪些人最适合学习鸿蒙开发呢&#xff1f;本文将为您总结鸿蒙开发适合的人群。 一、具备编程基础的人 学习鸿蒙开发需要…

SAP系统标准表之间的关联关系对应

SAP系统标准表之间的关联关系对应

互联网账户一证通查询名下账号

核验身份后一键在线查询名下所有关联号码以及注册。 名下电话卡查询&#xff1a;全国移动电话卡“一证通查” 手机号绑定查询&#xff1a;https://tb3.cn/A3lhMk

明道云引领企业变革与创新

内容来自演讲&#xff1a;周万均 | 成都护园科技有限公司 | 总经理 摘要 本文主要讲述了作者从甲方转变为乙方的角色转变过程中&#xff0c;对明道云的应用和探索。在选择系统时&#xff0c;企业会考虑的一些因素&#xff0c;并强调了团队、时间、成本和沟通等因素在企业数字化…

spring-validation实现分组校验

文章目录 前言实际开发可能会使用到分组校验maven添加依赖简单使用高级应用分组自定义分组组合分组 源码地址 前言 JSR 303中提出了Bean Validation&#xff0c;表示JavaBean的校验&#xff0c;Hibernate Validation是其具体实现&#xff0c;并对其进行了一些扩展&#xff0c;…

SaaS智慧校园云平台源码,智慧班牌系统,家校互联小程序源码

SaaS智慧校园云平台源码&#xff0c;智慧班牌系统&#xff0c;原生小程序 集智慧教学、智慧教务、智慧校务、智慧办公于一体的校园管理平台源码。集成智能硬件及第三方服务&#xff0c;面向学校、教师、家长、学生&#xff0c;将校内外管理、教学等信息资源进行整合&#xff0c…

基于ip地址通过openssl生成自签名证书

最近在配置geo的时候&#xff0c;客户说自己使用的是自签证书&#xff0c;然后是通过ip地址和端口的方式访问gitlab&#xff0c;比较好奇这块&#xff0c;因此对证书的生成和使用做了一些整理&#xff0c;对此网上关于这部分资料也很多&#xff0c;不过作为记录&#xff0c;也算…

【扩散模型】6、Classifier-Free Diffusion Guidance | 无需显示分类器指导也能获得很好的生成效果

论文&#xff1a;Classifier-Free Diffusion Guidance 代码&#xff1a;暂无 出处&#xff1a;NIPS 2021 workshop&#xff08;短版本论文&#xff09; 一、背景 在此之前&#xff0c;classifier guidance &#xff08;diffusion model beats GAN&#xff09;模型使用类别引…