校园网站开发的意义,美食网站建设的重要性,互联网行业分析报告,cms编码是什么文章目录 功能源码 功能
初始化bean执行的回调方法其一#xff0c;它不像PostConstruct一样可以有多个#xff0c;只能调用一次#xff1b;它执行的时机是在PostConstruct之后#xff0c;从它的名称也可以看出#xff0c;他是在属性填充完#xff0c;也就是bean初始化完… 文章目录 功能源码 功能
初始化bean执行的回调方法其一它不像PostConstruct一样可以有多个只能调用一次它执行的时机是在PostConstruct之后从它的名称也可以看出他是在属性填充完也就是bean初始化完后执行的回调方法。
注意 如果afterPropertiesSet方法被PostConstruct标注那么它就指挥在PostConstruct时机执行且只会执行一次。
在开发中常会使用在缓存的场景对某一类数据进行缓存或者需要在某一个bean完成初始化就需要执行的功能场景。
例如
作为示例下面代码不严谨常量需要定义到常量表可管理然后缓存尽量不要永久缓存需要设置过期事件
Component
AllArgsConstructor
Transactional(rollbackFor Exception.class)
public class TableServiceImpl extends ServiceImplTableMapper, Table implements TableService, InitializingBean {private final StringRedisTemplate redisTemplate;Overridepublic void afterPropertiesSet() throws Exception {ListTable 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标注的方法之一如果是就直接跳过不执行所以需要注意