一、什么是SpringBoot
简单来说就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了所有的框架,能让我们快速的建立一个应用。
二、SpringBoot的特点
1. 内嵌Web服务器
2.提供 starter,简化Maven配置
3.自动配置spring,以及第三方功能
4.无代码生产、无需编写XML文件
5. 建立独立Spring应用
6. 提供生产级别的监控、健康检查以及外部化配置
三、SpringBoot的自动配置
4.1 SpringBoot的启动流程
1、创建IOC容器
creatApplicationContext();
2、加载配置类
loadSourceClass();
3、加载并处理所有的配置类
processConfigurationClasses();
4、实例化所有的单例Bean
instatntiateSingletonBeans();
5、启动web服务器
startWebServer();
4.2 运行原理
SpringBoot的运行是由注解@EnableAutoConfiguration提供的,对jar包下的spring.factories文件进行扫描,这个文件中包含了可以进行自动配置的类,当满足@Condition注解指定的条件时,便在依赖的支持下进行实例化,注册到Spring容器中。
4.3 三大注解
@SpringBootConfiguration:继承自Configuration,支持JavaConfig的方式进行配置。
@EnableAutoConfiguration:本文重点讲解,主要用于开启自动配置。
@ComponentScan:自动扫描组件,默认扫描该类所在包及其子包下所有带有指定注解的类,将它们自动装配到bean容器中,会被自动装配的注解包括@Controller、@Service、@Component、@Repository等。也可以指定扫描路径。
4.4 @EnableAutoConfiguration
在启动类中可以看到@SpringBootApplication注解,它是SpringBoot的核心注解,也是一个组合注解。我们进入这个注解可以看到里面又包含了其它很多注解,但其中@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三个注解尤为重要。
进入@SpringBootApplication
进入@EnableAutoConfiguration
@Import注解重点关注,EnableAutoConfigurationImportSelector使用SpringFactoriesLoader.loadFactoryNames方法来扫描具有MEAT-INF/spring.factories文件的jar包,下面是spring-boot-autoconfigure-1.5.4.RELEASE.jar下的MEAT-INF中的spring.factories文件的部分内容
里面的类都是自动配置类,SpringBoot会根据这些自动配置类去自动配置环境。
4.5 自定义Starter
1、完成TestProperties类,这个类定义了默认的属性值,如该类中,只有一个属性值msg,默认为world。@ConfigurationProperties注解会定义一个匹配,如果想修改属性值,可以在application.properties中使用“匹配.属性=修改的值”进行修改
@ConfigurationProperties(prefix = "test")
public class TestProperties {
private static final String MSG = "springboot";
private String msg = MSG;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
2、完成服务类。服务类是指主要的功能类,如果没有SpringBoot,这些服务类在Spring中都是需要自己去配置生成的。如SpringMVC中的DispatcherServlet、Mybatis的DataSource等
public class TestService {
private String msg;
public String sayHello(){
return "Hello " + msg;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
3、完成自动配置类。自动配置类主要作用是SpringBoot的配置核心,它会写在MEAT-INF/spring.factories中,告知SpringBoot在启动时去读取该类并根据该类的规则进行配置
@Configuration
@EnableConfigurationProperties(TestProperties.class)
@ConditionalOnClass(TestService.class)
@ConditionalOnProperty(prefix = "test" , value = "enabled" , matchIfMissing = true)
public class TestServiceAutoConfiguration {
@Autowired
TestProperties testProperties;
@Bean
@ConditionalOnMissingBean(TestService.class)
public TestService testService(){
TestService testService = new TestService();
testService.setMsg(testProperties.getMsg());
return testService;
}
}
4、最后一步,不要忘记在在MEAT-INF文件夹中创建spring.factories文件。内容很简单,告诉SpringBoot去读取TestServiceAutoConfiguration类
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.miaolovezhen.TestServiceAutoConfiguration