- springboot是什么?
Springboot概念:
SpringBoot 遵循约定大于配置的原则。定义了一套接口规范,这套规范规定:SpringBoot 在启动时会扫描外部引用jar 包中的META-INF/spring.factories文件,将文件中配置的类型信息加载到 Spring 容器(此处涉及到 JVM 类加载机制与 Spring 的容器加载知识),并执行类中定义的各种操作。对于外部 jar 来说,只需要按照 SpringBoot 定义的标准,就能将自己的功能装置进 SpringBoot。
Springboot优势:
- 能够单独运行。无需打包放到tomcat容器中运行,自带tomcat的servlet容器,能够直接运行。
- 能够自动配置。通过各种starter组件,将配置项自动配置到容器中,只要依赖就能够使用,这也是“约定大于配置”的具体表现。
- 减少配置文件。不再需要xml等配置文件,可以通过注解来实现各种配置。
- 新增健康监控。通过actuator和endpoint来实现健康监控。
- springboot启动过程?
Springboot的启动主要是靠(1)@SpringBootApplication注解、(2)SpringApplication实例化和(3)SpringApplication.run()方法起作用。
@SpringBootApplication注解由以下3个组成:
- @SpringBootConfiguration:标注当前类是配置类,将其注入到Spring容器中。
- @EnableAutoConfiguration:开启自动配置,将META-INF/spring.factories文件中的配置类加载进来。
- @ComponentScan:扫描当前目录和子目录中bean,将其加载进来。
实例化SpringApplication:
- 判断是否为web环境;
- 设置初始化器;
- 设置监听器;
- 推断应用的入口类,开始调用run()方法;
SpringApplication.run()方法的流程:
- 通过SpringFactorieLoader对象获得SpringApplicationListener,获取监听器。
- 初始化Environment对象。
- 创造ApplicationContext容器对象,并做初始化。
- 查找容器中的CommandLinesRunner和ApplicationRunner,进行初始化操作。
- 最后启动ApplicationContext,所有bean对象已经加载到该容器中;
- SpringBoot 源码解析 (二)----- Spring Boot精髓:启动流程源码分析:https://www.cnblogs.com/java-chen-hao/p/11829344.html
- SpringBoot启动流程是怎样的?:https://juejin.cn/post/6895341123816914958#heading-8
- springboot自动配置原理?
sprinboot的自动配置主要依靠@EnableAutoConfiguration这个注解,使用这个注解就实现了ImportSelector接口,该接口的主要用途是加载各个starter中/MATE-INF/spring.factories中的配置类,将这些配置类加载到IoC容器中。值得注意的是所有以spring-boot-starter开头的依赖都放在springboot-autoconfig下,所以项目加入以上依赖,只要在properties文件中写好配置项,就会自动配置好,能够直接使用。
@SpringbootApplication由一下3个注解组成:
- @SpringBootConfiguration:运行将该注册类直接注入到IoC容器中;
- @ComponentScan:允许扫描配置路径的实体类,其中加上了@Controller、@Service、@Component等注解的将其加载到IoC容器中;
- @EnableAutoConfiguration:实现springboot自动装载的核心类;
- 淘宝一面:“说一下 Spring Boot 自动装配原理呗?”:
https://www.cnblogs.com/javaguide/p/springboot-auto-config.html
- 看完就会的SpringBoot自动装配原理:
- Spring Boot自动装配原理与启动过程详解:
https://juejin.cn/post/6940128900093575198#heading-11
- springboot的starter的原理?
starter是实现springboot中自动配置的具体形式,在starter目录/MATE-INF/spring.factories配置好需要加载到IoC的配置类信息,springboot-autoconfig会自动来读取该配置项,依靠反射来实例化配置项。
- springboot启动时候需要运行特定代码方法?
实现ApplicationRunner接口或者实现CommandLineRunner接口。