美文网首页
spring boot

spring boot

作者: go_2021 | 来源:发表于2021-12-17 15:41 被阅读0次
  1. 什么是 Spring Boot
    Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置提供了各种启动器,开发者能快速上手
  • 依赖简化
    只需要引入 spring-boot-starter-web spring mvc , json,tomcat 自动引入
    不用担心 版本不一致的问题
  • 配置简化
    不用各种xml 一堆的配置 properties 文件 简化配置 yml更简单
    不用配置扫包 直接指定@controller @component @ service就行了
  • 监控简化
    我们可以引入spring-boot-start-actuator 依赖,直接使用 REST 方式来获取进程的运行期性能参数,从而达到监控的目的,比较方便

参考:https://mp.weixin.qq.com/s/jWLcPxTg9bH3D9_7qbYbfw

  1. Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?

核心注解: @SpringBootApplication
又分为3个注解:

  • @SpringBootConfiguration@SpringBootConfiguration继承自@Configuration,二者功能也一致,标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。
 @Bean
 public Map createMap(){
 context.getBean("createMap"); //获取bean 实例名就是方法名
  • @ComponentScan:扫描启动类所在包下的所有类。
    这个注解加上@configuration可以扫描指定位置包,并把有 @service @controller类似注解的当做bean到并注册到spring 容器。
  • @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置。

参考:https://mp.weixin.qq.com/s/gs2zLSH6m9ijO0-pP2sr9Q
https://www.cnblogs.com/javaguide/p/springboot-auto-config.html

  1. 如何实现自动加载配置
    @EnableAutoConfiguration这个注解,起到了关键作用。
    在启动的时候会把导入包的META-INF/spring.factories路径下列出的配置类(XXXAutoConfiguration)自动装配到内存,过程中会类中的条件进行选择是否注入。其中的条件大致分为class,bean,配置3种,根据这3种是否存在选择是否注入。
  • META-INF/spring.factories中文件以接口和实现类为关系列出,接口为key( EnableAutoConfiguration不是),实现类为value;常见的接口有:
    • ApplicationContextInitializer启动初始化。会在springboot初始化时创建,在调用run方法时,创建Application后执行。
    • ApplicationListener启动监听器。会在springboot初始化时创建。在调用run方法时,各个步骤调用回调。
    • EnableAutoConfiguration 配置类实现自动配置功能。在runrefresh方法中调用(ApplicationContext的refresh的postproess步骤中创建);
    • 各种PostProcessor
  • META-INF是在生成jar包时放jar描述信息的文件夹。
    • 常见有mainfest.mf文件其中包含main类位置,以及其他加载jar包的配置。
    • 还有pom.xml,maven的配置。

参考:https://segmentfault.com/a/1190000030685746

  1. 启动流程
    spring boot启动 大致分为2步 ->SpingApplication初始化和run方法
  • SpingApplication 的初始化
    (1) 指定配置类 一般是main所在类 会根据类的注解去当做配置。确定web类型 是否是嵌入式servlet容器。
    (2) SpringFactoriesLoader的机制 扫描jar包下 /META-INF/spring.factories文件 把文件里指定的 ApplicationContextInitializerApplicationListener通过反射创建对象,存起来。
    (3) 指定主类-main所在类(通过调用栈获取)。感觉是为了打日志用的,日志要求指定类打印的。

  • SpringApplication run方法调用
    (1) SpringFactoriesLoader的机制 加载创建xxListener执行 starting
    (2) 准备Environment ,创建配置环境,启动参数等。runListener->environment准备好了
    (3) 通过environment创建ApplicationContext。 调用初始化时 xxInitializer的初始化方法 ,加载配置环境,启动参数等。runListener->ApplicationContext准备好了
    (4) application.refresh方法。主要是bean单例的加载,以及容器的创建。 runListener->ApplicationContext启动完了

    • bean信息存储到beanDefinetion的map中,设置beanfactory的类加载器和一些属性。
    • 执行beanFactorypostProcessor方法,
    • 注册bean的postProcessor (实例化springbootfactories文件中的指定的配置类)
    • 注册listener
    • 实例化业务中的bean(单例业务中@component,@controller,@Service注解的类)
    • 通知listener,applicationContext初始化完成

    (5) 检查是否有ApplicationRunner和CommandLineRunner,有的话就遍历执行 runListener->springboot启动完了

    图1.png
图2.png

参考:https://mp.weixin.qq.com/s/EzSM_VK8bH2QhWX9nGQONQ
https://www.jianshu.com/p/603d125f21b3
https://www.processon.com/view/link/59812124e4b0de2518b32b6e
https://blog.nowcoder.net/n/5900dcf9c0bf463d8f6c848859f054a4?from=nowcoder_improve
https://segmentfault.com/a/1190000019560001
https://blog.csdn.net/xuan_lu/article/details/108249324?utm_source=app&app_version=5.0.1&code=app_1562916241&uLinkId=usr1mkqgl919blen

  1. Spring Boot 的核心配置文件有哪几个?它们的区别是什么?
    Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件。
    application 配置文件这个容易理解,主要用于 Spring Boot 项目的自动化配置。
    bootstrap 配置文件优先级比较高,加载比较早。
    具体请看这篇文章《Spring Boot 核心配置文件详解》。

  2. Spring Boot 的配置文件有哪几种格式?它们有什么区别?
    application.properties中内容如下:

server.port=8080
server.servlet.context-path=elk
application.yml中内容如下:
server:
   port: 8080
   servlet:
       context-path: /elk

.yml格式的配置文件需要注意几点:
1)冒号后面要加空格;
2)缩进不能使用TAB;

  1. Spring Boot 有哪几种读取配置的方式?
 @Value("${info.address}")  
 private String address;
@ConfigurationProperties(prefix ="info")
 public class InfoConfig2{
@Autowired
private Environment env;
// 获取参数
String getProperty(String key){
     return env.getProperty(key);
}

参考:https://mp.weixin.qq.com/s/aen2PIh0ut-BSHad-Bw7hg

相关文章

网友评论

      本文标题:spring boot

      本文链接:https://www.haomeiwen.com/subject/vhtvfrtx.html