SpringBoot
SpringBoot概述
2)SpringBoot优点(约束大于配置):
独立运行:SpringBoot内嵌了各种Servlet容器,Tomcat、Jetty等,现在不再需要打成war包部署到容器中,SpringBoot只要打成一个可执行的jar包就能独立运行,所有的依赖包都在一个jar包内。
简化配置:spring-boot-starter-web启动器自动依赖其他组件,减少了maven的配置。
自动配置:SpringBoot能根据当前类路径下的类、jar包来自动配置bean,如添加一个spring-boot-starter-web启动器就能拥有web的功能,无需其他配置。
无代码生成和XML配置:SpringBoot配置过程中无代码生成,也无需XML配置文件就能完成所有配置工作,这一切都是借助于条件注解完成的,这也是Spring4.x的核心功能之一。
应用监控:SpringBoot提供一系列端点可以监控服务及应用,做健康检测。
SpringBoot自动配置原理
/** * @author XDZY * @date 2018/11/06 9:37 * @description 启动程序 */ @SpringBootApplication public class BootDemoApplication { public static void main(String[] args) { //SpringApplication用于从main启动spring应用的类 SpringApplication.run(BootDemoApplication.class, args); } }
SpringBootApplication:指定这是一个SpringBoot的应用程序,SpringBootApplication相当于SpringMvc的Configuration+EnableAutoConfiguration+ComponentScan。注意:当前的启动类也是受Spring容器管理的,因此可以在这个类中注入其他的Bean对象。
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan( excludeFilters = {@Filter( type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class} ), @Filter( type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class} )} ) public @interface SpringBootApplication { ...... }
SpringBootConfiguration:配置注解,表示当前引导类也是一个配置类,从源码可以看出,@SpringBootConfiguration完全就是@Configuration注解,@Configuration是Spring中的注解,表示该类是一个配置类,因此我们可以在启动类中做一些配置类可以做的事,比如注入一个Bean。
EnableAutoConfiguration:启动自动配置,关键注解,作用就是利用EnableAutoConfigurationImportSelector给容器中导入一些组件,在项目启动的时候向IOC容器中快速注入Bean。
ComponentScan:扫描配置,扫描当前引导类所在包下的类和子包下的类。
自动配置原理:EnableAutoConfiguration注解会扫描jar包路径下的META-INF/spring.factories文件,把扫描到的这些文件内容包装成properties对象。再从properties中获取到EnableAutoConfiguration.class类(类名)对应的值,并且把他们添加到容器中。具体位置在:Maven:org.springframwork.boot:spring-boot-autoconfigure:2.0.0.RELEASE包下,如默认配置启动端口server.port为8080,我们可以在配置文件中修改。