首先,为什么我们需要使用SpringBoot?
当我使用Spring我们遇到的问题,那就是我们需要开多个容器,以及每个容器都要写相应的配置类,比如我们的Service层需要写配置类,而Dao层也要写。
所以,我们就迫切的需要一个框架来帮我们解决这一个痛点。所以,SpringBoot诞生了。SpringBoot 帮我们简单、快速地创建一个独立的、生产级别的 Spring 应用(说明:SpringBoot底层是Spring)
自动配置机制
解决spring痛点的方法,spring就是靠着自动配置来进行实现的。
- 自动配置的 Tomcat、SpringMVC 等
-
- 导入场景,容器中就会自动配置好这个场景的核心组件。
- 以前:DispatcherServlet、ViewResolver、CharacterEncodingFilter....
- 现在:自动配置好的这些组件
- 验证:容器中有了什么组件,就具有什么功能。
-
public static void main(String[] args) { //java10: 局部变量类型的自动推断 var ioc = SpringApplication.run(MainApplication.class, args); //1、获取容器中所有组件的名字 String[] names = ioc.getBeanDefinitionNames(); //2、挨个遍历: // dispatcherServlet、beanNameViewResolver、characterEncodingFilter、multipartResolver // SpringBoot把以前配置的核心组件现在都给我们自动配置好了。 for (String name : names) { System.out.println(name); } }
默认的包扫描规则
SpringBoot项目会自动扫描主启动类所在包以及它下面的子包。 - 并且而且它会自动配置我们所需要的项目,比如,如果我们需要使用Tomcat项目,我们只需要把Tomcat需要的配置写在我们的配置类里面就好了。这样我们启动项目的时候,它就会自动配置Tomcat给我们,同理Mysql的也是。
- 它是怎么实现的呢?SpringBoot启动会默认加载 142个配置类。 这142个配置类来自于
spring-boot-autoconfigure
下META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
文件指定的 - 而在我们引入我们的依赖Spring-boot-start后,这个依赖就会自动的给我们引入AutoConfiguration自动配置类。而这个类检测到我们的yml文件里面配置了什么服务,就会给我们自动导入什么服务。
- 细节就是starter-web给我们导入了web开发场景。
- springBootApplication注解又给我们导入了EnableAutoConfiguration
-
核心流程总结:
1、导入
starter
,就会导入autoconfigure
包。2、
autoconfigure
包里面 有一个文件META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
,里面指定的所有启动要加载的自动配置类3、@EnableAutoConfiguration 会自动的把上面文件里面写的所有自动配置类都导入进来。xxxAutoConfiguration 是有条件注解进行按需加载
4、
xxxAutoConfiguration
给容器中导入一堆组件,组件都是从xxxProperties
中提取属性值5、
xxxProperties
又是和配置文件进行了绑定效果:导入
starter
、修改配置文件,就能修改底层行为。