SpringBoot是什么?
springboot是一个微服务的框架,是基于spirng开发的一个javaweb框架,好处是能够简单的利于开发,springboot是被抽象出来开发的框架,目的是为了集成更多的中间件。
springboot框架是一种轻量级的框架,因为各种配置太过于繁琐,所有形成了约定大于配置的说法,这里的java是重javaEE(企业级开发)–>Spring–>springBoot(微服务阶段)的过程。
springboot默认把我们进行了很多的设置,我们只需要写少量的代码。他还继承了非常多的第三方配置(redis,MongoDB,RabbitMQ等等),几乎是可以达到开箱即用
springboot(构建一切)-springcloud(协调一切)-springcluod data flow(链接一切)
Spring Boot 的特点
- 独立运行的 Spring 项目
Spring Boot 可以以 jar 包的形式独立运行,Spring Boot 项目只需通过命令“ java–jar xx.jar” 即可运行。 - 内嵌 Servlet 容器
Spring Boot 使用嵌入式的 Servlet 容器(例如 Tomcat、Jetty 或者 Undertow 等),应用无需打成 WAR 包 。 - 提供 starter 简化 Maven 配置
Spring Boot 提供了一系列的“starter”项目对象模型(POMS)来简化 Maven 配置。 - 提供了大量的自动配置
Spring Boot 提供了大量的默认自动配置,来简化项目的开发,开发人员也通过配置文件修改默认配置。 - 自带应用监控
Spring Boot 可以对正在运行的项目提供监控。 - 无代码生成和 xml 配置
Spring Boot 不需要任何 xml 配置即可实现 Spring 的所有配置。
SpringBoot自动装配原理
从@SpringBootApplication点进去,会看到 @EnableAutoConfiguration ,这个注解的作用就是让SpringBoot开启自动配置。
自动配置的奥秘全都在这里,点进去接着看:
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
这两个注解十分重要,挨个分析:
(1)@AutoConfigurationPackage 注解,从字面意思上来看就是自动配置包。
点进去可以看到就是⼀个 @Import 注解: @Import(AutoConfigurationPackages.Registrar.class) ,导⼊了⼀个Registrar 的组件,这个注解的作用就是将主配置类(@SpringBootConfiguration标注的类)所在的包及其下面所有子包里面所有的组件扫描到IOC容器中。所以说,默认情况下主配置类所在包及其子包以外的组件,Spring IOC容器是扫描不到的。
从classpath下获取所有META-INF/spring.factories这个文件下的信息。
将上面获取到的信息封装成Enumeration返回
遍历Enumeration,然后获取key为EnableAutoConfiguration下的所有值。
(2)@Import(AutoConfigurationImportSelector.class)
通过@Import导入了AutoConfigurationImportSelector类,而这个类的selectImports方法会通过SpringFactoriesLoader得到大量的配置类。而每个配置类则根据条件化配置类做出决策,以实现自动配置的功能.
总结:位于META_INF目录下的spring.factories,存放相关组件的配置工厂类;@EnableAutoConfiguration核心配置注解,里面有一个AutoConfigurationImportSelector(自动配置文件收集器),收集配置文件中的配置工厂类,然后SpringFactoriesLoader加载组件工厂(抽象工厂模式),进行实例化,在spring上下文中,生成bean。