为什么使用Springboot几乎可以做到零配置,有很多SpringMVC的配置全部都忽略掉了。这是为什么呢?本节就会来聊聊这个问题。
最主要的是基于SpringBoot的自动装配。
运行是通过这个SpringApplication的run方法,我们到run方法里面去看一下。
source就是传入进来的primarySource。也就是我们传入进来的Application.class
泛型就是Class里面是一个问号,所以任何一个类型的类,都可以传进来。
第二个参数,是一个数组,args通常传的是main方法的参数。
所以在调用的时候,main方法的args直接往这边一丢。
使用配置的一些配置或者设置,那么这些默认的设置从哪里来的呢?
默认的配置或设置都是在我们的注解里面的
当我们运行Run方法以后,它会返回一个正在运行的running,代表正在运行的上下文对象。代表了我们的SpringBoot容器启动了以后,它会有一个响应的上下文对象的。这是一个正在运行的ApplicationContext
@SpringBootApplication注解
注解里面的这些方法我们也用不到。
@ComponentScan扫描包的注解
当前这个启动类在com.imooc这个包下,当我们启动后,它会扫描这个包下的所有的类,以及所有子包下的类。
如果还有dao、service等包的话也会被扫描到。目前它的子包只有Controller。我们在HelloController上加了@RestController的注解,它又会被我们的容器扫描到。
@SpringBootConfiguration
它主要的配置是Configuration。
也就代表它是一个容器,相当于我们曾经在,Spring里面写一些xml的配置的时候,就是Beans,Beans里面又包含了一个一个的Bean。是一个IOC容器。这里的@Configuration就代表了一个容器。
@EnableAutoConfiguration
用于去开启自动装配。点进去看一下。
这里有一个Import
进入@Import。它表示一个或多个Configuration。它其实就是用于去做导入的,它导入的就是一个一个的Configuration。把容器导进去。
从他的字面意思上,我们可以看出来。它是一个自动装配的用于去导入的选择器。
既然是选择器的话,它有可能会包含很多的内容。就好像前端里面jquery的选择器,选择单个的或者批量的DOM元素,这里的Selector也是同样的道理。它可以选择很多自动装配的类。
我们点击进去
里面包含了很多的方法,
我们要关注的是。selectImports.用于去选择一些你想要去导入的装配的类,
用于去获得,自动装配的类。
进入到getAutoCOnfigurationEntry
我们需要关注的是这个condfigurations,是一个List<String> 类型, 它是通过getCandidateConfigurations方法获得,字面意思是获得一些后选的、或者说是备用的默认的一些配置。
我们再进入到getCandidateConfigurations。
断言,如果说发生了一些错误的话,它报报一些小的错误。如果为空格了可能出现下面的异常。
异常的信息。找不到一些自动配置的classes。在哪里找不到呢,在META-INF里面,在这个文件夹下回有spring.factories。factories就是工厂,在spring.factories里面包含了一些自动装配的类。这些类的话都是一个个的字符串。最后获得了以后是一个字符串类型的List
它会帮我们定位到某一个特定的jar包这货
这个jar包就是在spring-boot-autoconfigure自动装配的这么一个jar包里面。
有个META-INF文件夹,然后里面有个spring.factories.这个就是我们在当前类里面所描述的一个自动装配所有包含的一些内容。全部都在这个文件里面。
双击打开看一下。
当前这个类里面有很多的内容,而且大多后缀都叫做AutoConfiguration。都是自动装配。其实也就是说,我们这个springboot为我们实现了很多的自动装配。
搜索WebServer。主要来看下这个。点进去 。
它会有个tomcat。在满足这个条件的时候, 会去进行的加载。
它里面默认包含了一些内容。这个tomcat也就是springboot内置的tomcat。我们并没有去额外的下载tomcat,使用外置的tomcat
进入到tomcat的类里面。默认的端口号是8080.hostname是localhost
继续看其他装配器。
就是我们在开启了@EnableWebMvc。这个就是Spring里面的MVC或者说是Web模块。这里的MVC就是Spring里的MVC
它帮我们精简了很多的配置,他的配置就直接帮我们自动的去进行装配。
当我们在最外部使用@SpringBootApplicatin注解。自动装配里面又包含了很多注解。它是帮我们批量的去进行了一个运行。
ServletWebServerFactoryAutoConfiguration
startup就是用于启动tomcat的命令。
最上面的注释,就是开启自动装配,for 我们的servlet web Servers。就是我们的web服务器都是通过自动装配去运行的。这样就是说,为什么我们运行了Applicaion的时候,我们的内置的tomcat也就随之而启动了。就是因为这个原因。自动装配。
在这里去进行启动的tomcat
spring.factories里面主要就是涉及到这几个自动装配的类。当然在当前这个类里面,包含了很多很多的一些自动装配的类。在这里我们就不去异议的陈述了。
可以看到里面还有事务的自动装配
还有thymeleat。这是soringboot推荐的一个模板引擎。
出去面试的时候,可能会有面试官会问你。SpringBoot是如何自动装配的。它为什么会使用内置的tomcat去运行的。它是怎么具体的。通过这种方式,一步一步去看的话,你就可以去理解到它
结束