栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot/Spring扩展点系列之SmartInitializingSingleton - 第436篇

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot/Spring扩展点系列之SmartInitializingSingleton - 第436篇

​

历史文章(累计400+篇文章)

《国内最全的Spring Boot系列之一》

《国内最全的Spring Boot系列之二》

《国内最全的Spring Boot系列之三》

《国内最全的Spring Boot系列之四》

《国内最全的Spring Boot系列之五》

一款利用人工智能生成模型来合成代码的工具Copilot - 第430篇

SpringBoot配置文件内容加密,实现敏感信息保护 - 第431篇

扩展点系列之SmartInstantiationAwareBeanPostProcessor确定执行哪一个构造方法 - 432篇

扩展点系列之ApplicationContextAwareProcessor普通类获取Spring Bean - 第433篇

扩展点系列之初始化之@PostConstruct、init-method、InitializingBean - 第434篇

SpringBoot/Spring扩展点系列之FactoryBean让你不在懵逼 - 第435篇

悟纤:师傅,你看新闻了吗?最近新闻多多~

师傅:你说的是哪个新闻呢?

悟纤:林志颖父子车祸(2022年7月22日),林志颖伤势:头部脸部受到轻伤,暂无生命危险。

师傅:珍惜当下,意外和明天不知道哪个会先来。

悟纤:还有玄奘寺供奉牌位事件。

师傅:不是不报时候未到,时候一到,一切都报。

悟纤:疫情下,看着一切都正常在运转,实则…

师傅:古话说:达则兼济天下,穷则独善其身。在这个混沌的社会下,独善其身都很乱。

师傅:不管怎么样,都是要强大自身。

导读

SmartInitializingSingleton是spring 4.1中引入的新特效,与InitializingBean的功能类似,都是bean实例化后执行自定义初始化,都是属于spring bean生命周期的增强。但是,SmartInitializingSingleton的定义及触发方式方式上有些区别,它的定义不在当前的bean中(a bean's local construction phase)。

一、SmartInitializingSingleton概述

首先我们对于SmartInitializingSingleton先有一个基本的了解。

1.1 是什么?

InitializingBean 是在每一个bean 初始化完成后调用;多例的情况下每初始化一次就掉用一次。

SmartInitializingSingleton是所有的非延迟的、单例的bean 都初始化后调用,只调用一次。如果是多例的bean实现,不会调用。

说明:

(1)实现SmartInitializingSingleton的bean 要是单例。

(2)在所有非延迟的单例的bean初始化完成后调用。

1.2 接口定义

SmartInitializingSingleton接口中的afterSingletonsInstantiated()方法将会在所有的非惰性单实例Bean初始化完成之后进行回调。可以避免早期初始化的意外副作用。SmartInitializingSingleton可以看作是在所有的Bean初始化完成结束后的InitializingBean接口的替代。

1.3 SmartInitializingSingleton&InitializingBean的区别

(1)SmartInitializingSingleton接口只能作用于非惰性单实例Bean,InitializingBean接口无此要求。

(2)SmartInitializingSingleton接口是在所有非惰性单实例初始化完成之后进行激活回调,InitializingBean接口是在每一个Bean实例初始化完成之后进行激活回调。

1.4 使用场景

主要应用场合就是在所有单例bean 创建完成之后,可以在该回调中做一些事情。

举例说明:

(1)在Ribbon使用SmartInitializingSingleton定制个性化的RestTemplate:

(2)XXL-JOB 中SmartInitializingSingleton 的使用:

xxl-job中, XxlJobSpringExecutor,XxlJobSimpleExecutor 继承自 XxlJobExecutor 同时也实现了SmartInitializingSingleton 接口。

XxlJobSpringExecutor 在 afterSingletonsInstantiated()方法中,完成了提取 @XxlJob 注解标注的方法,用于后续任务的执行。调用父类方法中的start() 方法,初始化netty服务器。

(3)spring 容器中 SmartInitializingSingleton 的使用:

EventListenerMethodProcessor也实现了 SmartInitializingSingleton 接口,主要用于完成@EventListener注解方式的事件监听。

在afterSingletonsInstantiated()方法中处理逻辑与xxl-job 中的类似,都是用于筛选实例中被指定注解修饰的方法。

二、SmartInitializingSingleton的使用

对于SmartInitializingSingleton的使用很简单,只需要实现接口SmartInitializingSingleton即可。

2.1 构建项目

构建一个Spring Boot项目,这里在之前的一个项目spring-boot-applicationcontextinitializer-extend进行编码。

2.2 实现接口SmartInitializingSingleton

实现接口SmartInitializingSingleton:

package com.kfit.config;​import org.springframework.beans.factory.SmartInitializingSingleton;import org.springframework.stereotype.Component;​@Componentpublic class MySmartInitializingSingleton implements SmartInitializingSingleton {    @Override    public void afterSingletonsInstantiated() {        System.out.println("MySmartInitializingSingleton.afterSingletonsInstantiated");    }}​

运行Spring Boot应用,可以看到打印日志:

我就是我,是颜色不一样的烟火。
我就是我,是与众不同的小苹果。

à悟空学院:https://t.cn/Rg3fKJD

学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

SpringBoot视频:http://t.cn/A6ZagYTi

SpringBoot交流平台:https://t.cn/R3QDhU0

SpringSecurity5.0视频:http://t.cn/A6ZadMBe

ShardingJDBC分库分表:http://t.cn/A6ZarrqS

分布式事务解决方案:http://t.cn/A6ZaBnIr

JVM内存模型调优实战:http://t.cn/A6wWMVqG

Spring入门到精通:https://t.cn/A6bFcDh4

大话设计模式之爱你:https://dwz.cn/wqO0MAy7

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1028549.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号