首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >springBoot(面试专题-持续更新)-2022-11-13-第一次更新

springBoot(面试专题-持续更新)-2022-11-13-第一次更新

作者头像
高大北
发布2022-11-18 17:37:03
发布2022-11-18 17:37:03
6470
举报

第一章 springboot

springboot启动流程
  • 参考
代码语言:javascript
复制
https://blog.csdn.net/weixin_44947701/article/details/124055713
  • 框架的初始化
  • 框架启动
  • 自动化装配
什么是系统初始化器,以及实现的三种方式
  • 类名:ApplicationContextInitializer
  • 官方描述:springboot在spring容器刷新之前执行的一个回调函数
  • 作用:向springboot容器注册属性
  • 使用继承接口自定义实现
  • 第一种方式
    • 编写FirstInitializer实现ApplicationContextInitializer
    • 重写initialize方法
      • 获取环境
        • applicationContext.getEnvironment();
      • 自定义属性
        • new HashMap<String,Object>();
      • 打包成一个属性
        • new MapPropertySource(“FirstInitializer”, map);
      • 放入environment当中
        • environment.getPropertySources().addLast(firstInitializer);
      • 新建src/main/resources/META-INF
代码语言:javascript
复制
org.springframework.context.ApplicationContextInitializer=com.classes.sb2.initializer.FirstInitializer
  • 第二种
    • 编写FirstInitializer实现ApplicationContextInitializer
    • 重写initialize方法
      • 获取环境
        • applicationContext.getEnvironment();
      • 自定义属性
        • new HashMap<String,Object>();
      • 打包成一个属性
        • new MapPropertySource(“FirstInitializer”, map);
      • 放入environment当中
        • environment.getPropertySources().addLast(firstInitializer);
    • 启动类重写
代码语言:javascript
复制
@SpringBootApplication
@MapperScan("com.classes.sb2.mapper")
public class Sb2Application {
    public static void main(String[] args) {
//        SpringApplication.run(Sb2Application.class, args);
        SpringApplication springApplication = new SpringApplication(Sb2Application.class);
        springApplication.addInitializers(new SecodInitializer());
        springApplication.run(args);
    }
}
  • 第三种
    • 编写FirstInitializer实现ApplicationContextInitializer
    • 重写initialize方法
      • 获取环境
        • applicationContext.getEnvironment();
      • 自定义属性
        • new HashMap<String,Object>();
      • 打包成一个属性
        • new MapPropertySource(“FirstInitializer”, map);
      • 放入environment当中
        • environment.getPropertySources().addLast(firstInitializer);
    • application.properties
代码语言:javascript
复制
context.initializer.classes=com.classes.sb2.initializer.ThrdInitializer

3.系统初始化器如何被加载到springboot当中/springFactoriesLoader如何加载工厂类 其实最主要的就是依赖springFactoriesLoader, 流程 框架内部使用的通用工厂加载机制 从classpath多个jar包读取特定的位置读取文件并初始化类 文件内容必须是k-v结构,也就是properties key是全限定名(抽象类|接口),value实现,多个实现用逗号分隔 4.介绍一下springFactoriesLoader这个类 springboot工厂的加载类,springboot用它实现我们扩展点的载入 5.系统初始化器的调用时机 springboot run方法当中的prepareContext当中去调用的 6.自定义初始化器的有哪些注意事项 order值的大小排序,三种排序。如果使用application.properties,order将默认为0,排序优先。 第二章 监听器解析 1.监听器模式 监听器模式的要素 事件(抽象) 监听器 广播器 触发机制

2.springboot框架有哪些事件以及事件的发送顺序 Starting 应用开始启动(记住) Prepared:环境准备完成(context 被创建前)(记住) ContextInitialize:上下文初始化完成(记住) PreparedEvent:应用准备完成,开始定义bean,但还没有刷新到上下文(记住) Started: 应用启动完成,所有bean已经定义好,并且刷新到了上下文中(记住) AvailabilityChangeEvent:应用已处于活动状态 ReadyEvent: 应用就绪(记住) AvailabilityChangeEvent:应用可以开始准备接收请求,处理业务了(可以不记) FailedEvent: 启动失败触发(记住) 3.如何自定义监听器 三种注册方式(spring.factors/application.properties/new springApplication) 两种实现方式 实现ApplicationListener接口<编写感兴趣的事件> public class FirestListener implements ApplicationListener 实现SmartApplicationListener接口 重写supportsEventType编写感兴趣的事件 return ApplicationStartedEvent.class.isAssignableFrom(eventType) || ApplicationPreparedEvent.class.isAssignableFrom(eventType); 4.springboot关于监听器相关的实现类有哪些? 比如mybaties框架中的:SqlSessionFactoryBean(不强调记忆) 比如日志:LoggingApplicationListener在Prepared事件:环境准备完成 5.实现ApplicationListener接口与实现SmartApplicationListener接口的区别? ApplicationListener 指定某一类 SmartApplicationListener 可以指定多个类进行监听 第三章 bean解析 1.ioc思想 IOC的思想就是让对象的创建不在交给代码,而是交给其他人比如调用者(Spring是容器来管理)。 实现对象和代码的一个解耦合,使得改动的时候不再做那么多的改动。 2.springboot中bean有哪几种方式 xml方式注册bean 优点 低耦合 对象关系清晰 集中管理 弊端 配置繁琐 降低开发效率 文件解析耗时 一共有四种:无参构造,有参构造,静态工厂方法,实例工厂方法 无参构造 有参构造 静态工厂方法 实例工厂方法 注解方式注册bean 优点 使用简单 开发效率高 高内聚 缺点 配置分散 对象关系不清晰 配置修改都需要重新编译 3.refresh方法流程(重点) 首先refresh使用synchronized关键字,表示同一时间只能进入一个启动spring容器 prepareRefresh 设置容器的状态 初始化属性的设置(监听器) 必备属性是否存在 初始化容器 obtainFreshBeanFactory 设置BeanFactory的序列化id 获取BeanFactory prepareBeanFactory 设置BeanFactory的一些属性(类加载器、支持表达式解析器…) 添加后置处理器 设置忽略的自动装配接口 注册一些组件 postProcessBeanFactory 子类重写以在BeanFactory完成创建后做进一步设置 就是增加一些web的组件 invokeBeanFactoryPostProcessors 调用BeanDefinitionRegistryPostProcessor实现向容器内部添加bean的定义 调用BeanFactoryPostProcessor实现向容器内部添加bean的定义 registerBeanPostProcessors 找到BeanPostProcess的实现 排序后进入容器内 initMessageSource 初始化国际化属性 initApplicationEventMulticaster 初始化时间广播器 onRefresh 创建web容器 registerListeners 添加容器内的事件监听器至事件广播器中 派发早期事件 finishBeanFactoryInitialization 初始化所有剩下的单实例bean finishRefresh 初始化生命周期处理器 调用化生命周期处理器onRfresh方法 4.请介绍一个refresh中你比较熟悉的方法说其作用 onRefresh 这一步是空实现,留给子类扩展 SpringBoot 中的子类在这里准备了 WebServer,即内嵌 web 容器 体现的是模板方法设计模式 5.bean实例hua的流程 Spring容器在进行初始化时,< bean>的信息封装成一个 BeanDefinition 对象,所有的 BeanDefinition 存储到一个名为 beanDefinitionMap 的 Map 集合中去, Spring 框架再对该 Map 进行遍历,使用反射创建 Bean 实例对象,创建好的 Bean 对象存储在一个名为 singletonObjects 的 Map 集合中,当调用 getBean 方法时则最终从该 Map 集合中取出 Bean 实例对象返回。 6.bean实例化的扩展点极其作用(说几个) 1、ApplicationContextAware:获取应用上下文 2、BeanPostProcessor 接口在对象实例化后, 初始化方法调用前后做前置处理和后置处理操作。 7.bean的生命周期 实例化 --> 填充属性 --> 执行aware接口 --> 初始化 --> 可用状态 --> 销毁 第四章 banner解析 1.banner常见的配置方式 spring.banner.location 2.banner的获取原理 输出banner的逻辑 获取banner getIMGBanner getTextBanner 打印banner 3.banner输出原理 默认banner输出 先输出banner指定内容 获取version信息 文本内容前后对其 文本内容染色 输出文本内容 文字banner输出 图片banner输出 读取图片文件流 输出图片内容 第五章 启动加载器/定时器 1.springboot计时器的实现/他有哪些优点 ApplicationRunner与CommandLineRunner 不同点 同等级order下ApplicationRunner》CommandLineRunner ApplicationRunner传入ApplicationArguments对象 CommandLineRunner传入原生对象 相同点 调用点一样 实现方法是一样的 2.怎么实现在springboot启动后执行程序 借助系统加载器实现 3.启动加载器如何实现的 callRunner实现 添加ApplicationRunner到集合当中 添加CommandLineRunner到集合当中 对集合进行排序 分别调用方法 run 4.启动加载器的调用时机 是在springboot run方法的,最后一步调用的

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一章 springboot
    • springboot启动流程
    • 什么是系统初始化器,以及实现的三种方式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档