96SEO 2026-02-20 08:31 28
。

SmartInitializingSingleton扩展点内只有一个扩展方法#xff0c;且执行时机在Spring
Bean的生命周期里比较靠后#xff0c;很重要#xff0c;但是也很简单。
功能特性1、Smar…前言这篇文章会重点分析一下SmartInitializingSingleton扩展点的功能
、工作原理。
SmartInitializingSingleton扩展点内只有一个扩展方法且执行时机在Spring
Bean的生命周期里比较靠后很重要但是也很简单。
功能特性1、SmartInitializingSingleton主要用于在Spring容器启动完成时进行扩展操作即afterSingletonsInstantiated()2、实现SmartInitializingSingleton接口的bean的作用域必须是单例afterSingletonsInstantiated()才会触发3、afterSingletonsInstantiated()触发执行时非懒加载的单例bean已经完成实现化、属性注入以及相关的初始化操作3、afterSingletonsInstantiated()的执行时机是在DefaultListableBeanFactory#preInstantiateSingletons()关于Spring
bean有七种作用域默认singleton(单例)、prototype、request、session、globalSession、application、websocket1、singleton(单例)Spring容器只会创建一个bean对象2、prototype每次获取bean都会重新创建一个bean对象3、request对于每一个http请求在同一个请求内Spring容器只会创建一个bean对象若请求结束bean也随之销毁4、session在同一个http会话里Spring容器只会创建一个bean对象若传话结束也随之销毁5、globalSessionglobalSession作用域的效果与session作用域类似但是只适用于基于portlet的web应用程序中6、application在servlet程序中该作用域的bean将会作为ServletContext对象的属性被全局访问与singleton的区别就是singleton作用域的bean在Spring容器中只一application作用域的bean在ServletContex中唯一7、websocket为每个websocket对象创建一个实例。
仅在Web相关的ApplicationContext中生效。
实现方式
这里用一个示例验证SmartInitializingSingleton的功能特性并且通过debug分析其工作过程1、定义Dog类以setter注入方式进行属性注入同时Dog类实现SmartInitializingSingleton接口重写afterSingletonsInstantiated()并在方法内部打印日志如果在实际业务开发过程中用到了这个扩展点相关的扩展操作逻辑就是在这个方法内实现Slf4j
{log.info(----Dog的无参构造方法被执行);}Autowiredpublic
food;log.info(----dog的food属性被注入);}Overridepublic
{log.info(----com.fanfu.entity.Dog.afterPropertiesSet触发执行);}public
{log.info(----com.fanfu.entity.Dog.myInitMethod触发执行);}Overridepublic
{log.info(----com.fanfu.entity.Dog.destroy触发执行);}Overridepublic
{log.info(----com.fanfu.entity.Dog.afterSingletonsInstantiated触发执行);}
{log.info(----Food的无参数构造方法被执行);}
}3、使用Configuration配置类的方式注册Dog、Food到Spring容器里默认是单例对象Configuration
test5(){log.info(----单元测试执行开始);AnnotationConfigApplicationContext
AnnotationConfigApplicationContext(com.fanfu);log.info(----单元测试执行完毕);}工作原理
如果我分享的关于Springboot扩展点系统的文章从头都一点一点自己debug看过的话一定对AbstractApplicationContext#refresh()不陌生与Spring容器启动相关的核心逻辑都在这个方法中。
1、在AbstractApplicationContext#refresh()中会发现调用了finishBeanFactoryInitialization()从上面的注释可以看出这个方法昌要实例化所有非懒加载的单例bean2、进入到finishBeanFactoryInitialization()方法内做了一些beanFactory的准备工作后调用preInstantiateSingletons()开始非懒加载的单例bean实例化3、继续往下实际上是调用
了DefaultListableBeanFactory#preInstantiateSingletons()单独看这个方法逻辑相对简单分为两部分第一部分bean的实例化、属性注入、相关初始化操作第二部分找出所有实现了SmartInitializingSingleton接口的实现类遍历并执行afterSingletonsInstantiated()public
{//----------start------------------实例化bean----------------------------------------if
{logger.trace(Pre-instantiating
ArrayList(this.beanDefinitionNames);//
getMergedLocalBeanDefinition(beanName);if
AccessController.doPrivileged((PrivilegedActionBoolean)
factory)::isEagerInit,getAccessControlContext());}else
{getBean(beanName);}}}//----------end------------------实例化bean----------------------------------------//----------start------------------SmartInitializingSingleton#afterSingletonsInstantiated----------------------------------------for
getSingleton(beanName);//判断单例bean是否实现了SmartInitializingSingleton接口if
{AccessController.doPrivileged((PrivilegedActionObject)
{smartSingleton.afterSingletonsInstantiated();return
getAccessControlContext());}else
{//执行afterSingletonsInstantiated()smartSingleton.afterSingletonsInstantiated();}}}//----------start------------------SmartInitializingSingleton#afterSingletonsInstantiated----------------------------------------
}总结如果要在业务开发中使用SmartInitializingSingleton扩展点需要特别注意实现这个接口的bean应该是非懒加载的单例bean执行时机是在bean完成实例化、属性注入、相关初始化操作后否则无法触发执行。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback