SpringBoot自动配置原理
为什么依赖变少了?springboot是如何管理这些依赖的?
从pom文件出发,首先有一个父依赖spring-boot-starter-parent,父依赖又依赖于spring-boot-dependencies父依赖,这是pom工程,定义了一些第三方的jar包的版本。
如开发web模块,只需要引入spring-boot-starter-web,就会发现里面复用了一些定义好了版本的starter。
为什么不需要配置?看下启动类@SpringBootApplicaton注解,是一个组合注解,包含:@SpringbootConfiguration,就是Spring中@Configuration注解,表示是一个配置类,@Configuration实际上是一个@Component,是Spring管理的组件。
@EnableAutoConfiguration,是sb自动配置的核心,告诉sb开启自动配置。他包含下面2个注解@AutoConfigurationPackage,将配置类所在的包作为自动配置的包进行管理;
@Impoet 导入一个类到IOC容器中;导入的类,根据meta-inf下的sping.factory的配置进行导入。
@CompontScan,是Spring中的,将指定包下需要装配的组件注册到容器中。
springBoot根据配置文件自动装配所属依赖类,再通过动态代理的方式注入到spring容器中。
如何理解 Spring Boot 中的 Starter
使用spring + springmvc时,如果需要引入mybatis等框架,需要到xml中定义mybatis需要的bean。
starter就是定义一个starter的jar包,写一个@Configuration配置类、将这些bean定义在里面,然后在starter包的META-INF/spring.factories中写入该配置类,springboot会按照约定来加载该配置类。
开发人员只需要将相应的starter包依赖进应用,进行相应的属性配置(使用默认配置时,不需要配置),就可以直接进行代码开发,使用对应的功能了,比如mybatis-spring-boot–starter,spring-boot-starter-redis。
什么是嵌入式服务器?为什么要使用嵌入式服务器?
节省了下载安装tomcat,应用也不需要再打war包,然后放到webapp目录下再运行只需要一个安装了 Java 的虚拟机,就可以直接在上面部署应用程序了。
springboot已经内置了tomcat.jar,运行main方法时会去启动tomcat,并利用tomcat的spi机制加载springmvc。
发表回复