吃透SprinngBoot
Springboot
1、概述
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
2、构建SpringBoot项目
3、SpringBoot自动装配分析
3.1、启动类
//@SpringBootApplication:表示这个类是SpringBoot的类
@SpringBootApplication
public class SpringbootDemo01Application {
//将SpringBoot应用启动
public static void main(String[] args) {
SpringApplication.run(SpringbootDemo01Application.class, args);
}
}
3.2、分析
Ctrl+鼠标点击@SpringBootApplication进入
这个注解也是个派生注解,点击进入下一层
⽽这个注解也是⼀个派⽣注解,其中的关键功能由@Import提供,其导⼊的AutoConfigurationImportSelector的selectImports()⽅法通过
SpringFactoriesLoader.loadFactoryNames()扫描所有具有META-INF/spring.factories的jar包。spring-boot-autoconfigure-x.x.x.x.jar⾥就有⼀个这样
spring.factories⽂件。这个spring.factories⽂件也是⼀组⼀组的key=value的形式,其中⼀个key是EnableAutoConfiguration类的全类名,⽽它的value是⼀个xxxxAutoConfigur
的列表,这些类名以逗号分隔,如下图所示:
这个@EnableAutoConfiguration注解通过@SpringBootApplication被间接的标记在了Spring Boot的启动类上。在SpringApplication.run(...)的内部就会执
selectImports()⽅法,找到所有JavaConfig⾃动配置类的全限定名对应的class,然后将所有⾃动配置类加载到Spring容器中。
每⼀个XxxxAutoConfiguration⾃动配置类都是在某些条件之下才会⽣效的,这些条件的限制在Spring Boot中以注解的形式体现,例如:
@ConditionalOnBean:当容器⾥有指定的bean的条件下。
@ConditionalOnMissingBean:当容器⾥不存在指定bean的条件下。
@ConditionalOnClass:当类路径下有指定类的条件下。
@ConditionalOnMissingClass:当类路径下不存在指定类的条件下。
@ConditionalOnProperty:指定的属性是否有指定的值,⽐如@ConditionalOnProperties(prefix=”xxx.xxx”, value=”enable”, matchIfMissing=true),代
xxx.xxx为enable时条件的布尔值为true,如果没有设置的情况下也为true。