SpringBoot

SpringBoot

SpringBoot概述

1)SpringBoot为Java开发人员提供了一个很好的平台来开发一个可以运行的独立和生产级的Spring应用程序。您可以从最低配置开始,而不需要整个Spring配置设置。

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,我们可以在配置文件中修改。

 

posted @ 2018-08-31 13:56  肖德子裕  阅读(187)  评论(0编辑  收藏  举报