Spring-boot汇总
Spring-boot的目的是帮助开发者快速搭建Spring框架,帮助开发者快速启动web容器,Spring-boot继承了原有Spring框架的优秀基因,Spring-boot化简了使用Spring的过程。
核心功能
1. 从大量XML配置改成JavaConfig,看起来更清晰,因为分开了一个个类,不需要配置web.xml,javaConfig时,要将信息注入到bean,如:拦截器、过滤器、DispatcherServlet配置
2. 内嵌Tomcat(默认)和Jetty,只要有JDK就能启动web服务
3. 提供starter简化Maven配置,只要用了spring-boot-starter-web,就能自动加入很多依赖包,如:webmvc、core、tomcat、annotation
4. 开发支持热部署,spring loaded
5. 只有一个全局的application.properties文件,这里放整个项目的总体配置
6. 日志记录默认使用logback,可以根据配置文件激活不同的loging.level,logback可以有自己的xml,用于配置激活,还有log的格式化,还有日志文件大小,压缩打包。
Spring-boot 自动配置原理
这里还是要看@SpringBootApplication这个注释,他里面实现是一个组合注释,其核心是由@EnableAutoConfiguration提供,里面有个SpringFactoriesLoader.loadFactoryNames方法,扫描spring.factories中要自动配置哪些类。
所以,在pom中选择spring-boot-starter-web,是挺重要的,加入这个依赖,就相当于加入了很多spring的常用依赖。
Spring-boot-starter的工作原理
1. Spring-boot启动时,扫描所有依赖的jar包,寻找包含spring.factories文件的jar
2. 根据spring.factories配置,加载自动加载的类
3. 根据 @Conditional注解的条件,进行自动配置并将Bean注入Spring Context
自定义Spring-boot-starter注意事项
1. springboot默认scan的包名是其main类所在的包名。如果引入的starter包名不一样,需要自己添加scan。
@ComponentScan(basePackages = {"com.xixicat.demo","com.xixicat.sms"})
2. 对于starter中有feign的,需要额外指定
@EnableFeignClients(basePackages = {"com.xixicat.sms"})
3. 对于exclude一些autoConfig
@EnableAutoConfiguration(exclude = {MetricFilterAutoConfiguration.class})
对Spring-boot的认识
spring Boot是一个开源框架,它可用于创建可执行的Spring应用程序,采用了习惯优于配置的方法。此框架的神奇之处在于@EnableAutoConfiguration注解,此注释自动载入应用程序所需的所有Bean——这依赖于Spring Boot在类路径中的查找。
@Enable*注释
@Enable*注释并不是新发明的注释,早在Spring 3框架就引入了这些注释,用这些注释替代XML配置文件。
- @EnableTransactionManagement:它能够声明事务管理
- @EnableWebMvc:它能启用Spring MVC
- @EnableScheduling:它可以初始化一个调度器。
属性映射
下面看MongoProperties类,它是一个Spring Boot属性映射的例子:
@ConfigurationProperties(prefix = "spring.data.mongodb")
public class MongoProperties {
private String host;
private int port = DBPort.PORT;
private String uri = "mongodb://localhost/test";
private String database;
// ... getters/ setters omitted
}
@ConfigurationProperties注释将POJO关联到指定前缀的每一个属性。例如,spring.data.mongodb.port属性将映射到这个类的端口属性。
强烈建议Spring Boot开发者使用这种方式来删除与配置属性相关的瓶颈代码。
@Conditional注释
Spring Boot的强大之处在于使用了Spring 4框架的新特性:@Conditional注释,此注释使得只有在特定条件满足时才启用一些配置。
在Spring Boot的org.springframework.boot.autoconfigure.condition包中说明了使用@Conditional注释能给我们带来什么,下面对这些注释做一个概述:
- @ConditionalOnBean
- @ConditionalOnClass
- @ConditionalOnExpression
- @ConditionalOnMissingBean
- @ConditionalOnMissingClass
- @ConditionalOnNotWebApplication
- @ConditionalOnResource
- @ConditionalOnWebApplication
应用程序上下文初始化器
spring.factories还提供了第二种可能性,即定义应用程序的初始化。这使得我们可以在应用程序载入前操纵Spring的应用程序上下文ApplicationContext。
特别是,可以在上下文创建监听器,使用ConfigurableApplicationContext类的addApplicationListener()方法。
AutoConfigurationReportLoggingInitializer监听到系统事件时,比如上下文刷新或应用程序启动故障之类的事件,Spring Boot可以执行一些工作。这有助于我们以调试模式启动应用程序时创建自动配置的报告。
要以调试模式启动应用程序,可以使用-Ddebug标识,或者在application.properties文件这添加属性debug= true。
学习
http://tengj.top/2017/04/24/springboot0/