大家能区分出以下各种初始化适用的场景吗

ApplicationRunner,CommandLineRunner,BeanFactoryPostProcessor,InitializingBean,BeanPostProcessor

首先可以简单分类

Springboot的钩子

1,ApplicationRunner

2,CommandLineRunner

上述2个钩子其实没啥区别,都是在springboot容器启动之后,SpringApplication.run("run参数")完成之前,负责初始化

Spring的钩子

1,BeanFactoryPostProcessor

官方解释用白话翻译一下就是,所有的Bean都收集完成啦,下一步就是Bean的初始化(Bean对象创建,依赖的其他对象注入),这个后置操作目的就是对还为初始化的Bean集合进行裁剪,添加,删除

2,BeanPostProcessor

这个时候,Bean已经初始化完成啦,但是我们可以对Bean进行操作,比如:对这个Bean进行静态代理,在帮这个静态代理返回到Bean集合中,那么你从IOC容器中获取的Bean实例时就是这个静态代理对象啦,而不是原先的那个Bean啦(说白啦,spring担心你想对Bean对象进行处理,给你提供一个入口)

3,InitializingBean

提供这个后置操作的目的,是为了进行业务准备的,比如:当Bean初始化完成以后,你要从数据库中加载一部分数据到内存。

下面花了一张图,方便大家理解

 

SpringBoot中常见的各种初始化场景分析的更多相关文章

  1. Springboot中mybatis执行逻辑源码分析

    Springboot中mybatis执行逻辑源码分析 在上一篇springboot整合mybatis源码分析已经讲了我们的Mapper接口,userMapper是通过MapperProxy实现的一个动 ...

  2. Js中常见的内存泄漏场景

    常见的内存泄漏场景 内存泄漏Memory Leak是指程序中已动态分配的堆内存由于疏忽或错误等原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果.内存泄漏并非指内 ...

  3. SpringBoot中常见注解含义总结

    @RestController @RestController被称为一个构造型(stereotype)注解.它为阅读代码的开发人员提供建议.对于Spring,该类扮演了一个特殊角色.它继承自@Cont ...

  4. spring中bean配置和注入场景分析

    bean与spring容器的关系 Bean配置信息定义了Bean的实现及依赖关系,Spring容器根据各种形式的Bean配置信息在容器内部建立Bean定义注册表,然后根据注册表加载.实例化Bean,并 ...

  5. SpringBoot中常见的错误

    数据源配置问题 原因 spring boot默认会加载org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration类, ...

  6. redis-数据结构以及使用场景分析

    目录 redis 常见数据结构以及使用场景分析 key String Hash List Set Sorted Set Bitmap和HyperLogLog Pub/Sub redis 常见数据结构以 ...

  7. SpringBoot中通过SpringBootServletInitializer如何实现容器初始化

    相关文章 <Servlet3.0之四:动态注册和Servlet容器初始化> <SpringBoot中通过SpringBootServletInitializer如何实现组件加载> ...

  8. JVM之调优及常见场景分析

    JVM调优 GC调优是最后要做的工作,GC调优的目的可以总结为下面两点: 减少对象晋升到老年代的数量 减少FullGC的执行时间 通过监控排查问题及验证优化结果,可以分为: 命令监控:jps.jinf ...

  9. Java中9种常见的CMS GC问题分析与解决

    1. 写在前面 | 本文主要针对 Hotspot VM 中"CMS + ParNew"组合的一些使用场景进行总结.重点通过部分源码对根因进行分析以及对排查方法进行总结,排查过程会省 ...

  10. C++ STL中常见容器的时间复杂度和比较和分析

    C++ STL中常见容器的时间复杂度 map, set, multimap, and multiset 上述四种容器采用红黑树实现,红黑树是平衡二叉树的一种.不同操作的时间复杂度近似为: 插入: O( ...

随机推荐

  1. jmeter转义

    /reportDetail?md5Key%3De7beff4c73ccd8f1cb01c383eda7fed0%26cid%3D1344500703825739777%26isShow%3Dfalse ...

  2. bat脚本批量删除指定源码编译后的文件

    @echo off @REM 使循环内的set命令有效 setlocal enabledelayedexpansion set DIR_ROOT=%~dp0..\ for /f "delim ...

  3. nohup 命令 追加输入日志或者覆盖输出日志

    nohup python3 -u botxiaohui.py >> botruninfo.log 2 >&1 & >>  是追加的输出 >    单 ...

  4. SpringBoot测试类注入Bean失败原因

    首先针对SpringBoot的测试类,2.2版本之前和2.2版本之后是不一样的,在2.2版本之前需要贴注解@SpringBootTest和@RunWith(SpringRunner.class)需要在 ...

  5. 基于MassTransit.RabbitMQ的延时消息队列

    1 nuget包 <PackageReference Include="MassTransit.RabbitMQ" Version="8.0.2" /&g ...

  6. uniapp中使用echarts点击图例与tooltips无反应

    只需要在项目main.js文件中加上 window.wx = {} // echarts中tooltips点击无反应与点击图例无反应解决方法 即可

  7. 在uniapp中使用百度地图的Autocomplete(关键字自动完成提示)不弹出提示框的问题

    let ac = new BMap.Autocomplete({ "input": document.querySelector('input'), "location& ...

  8. 了解JAVA基本知识以及一下常用的dos命令

    9月5日学习 常用的Dos命令 #盘符切换盘符名称: =>回车​#查看当前目录下的所有文件dir​#切换目录 cd change directorycd .. =>返回上一级目录​#清理屏 ...

  9. wait_event_interruptible() 等待队列

    在Linux驱动程序中,可以使用等待队列(Wait Queue)来实现阻塞进程的唤醒. 1.定义"等待队列头部" wait_queue_head_t my_queue; wait_ ...

  10. 【转载】MSVC中C++ UTF8中文编码处理探究

    字符集 先说一个名词:字符集,没听过的先百度一下,其实就是一种将字符编码的格式,像我们常说的ASCII,UTF8,GBK都是常用的字符集. 首先要清楚,从你在编辑器里输入一个UTF8汉字开始,到最终在 ...