springboot是服务于spring框架的框架,可以帮助使用Spring的开发者快速构建Spring框架,它基于了约定由于配置的理念,服务的范围是简化配置文件;
1.约定由于配置:
约定优于配置,是一种软件设计范式,目的在于减少开发人员需要做决定的数量,使开发变得简单,但不失灵活
体现:
- maven的目录结构
- 默认以jar的方式打包
- 默认会有resource文件夹
- 默认提供application.properties/yml文件
- main方法运行就会启动web工程,启动时创建一个内置的tomcat容器,将当前项目部署在此容器中
- 可以通过Spring,profiles.active属性来决定运行不同环境读取的配置文件
- maven里面引用了spring-boot-starter-web
- 会自动添加spring mvc工程所需要的所有东西
2. 重点需要了解的内容
对spring 已有的东西进行封装然后创建出来的新东西:
- AutoConfiguration 自动装配
- Starter
- Actuator
- SpringBoot CLI
3.启动类上的复合注解: @SpringBootApplication
本质上复合了@EnableAutoConfiguration,@ComponentScan,@Configuration
- EnableAutoC onfiguration
EnableAutoConfiguration 的 主要作用其实就是帮助springboot 应用把所有符合条件的@Configuration 配置都自动加载到当前 SpringBoot 创建并使用的 IOC 容器中 - ComponentScan
扫描@Component/@Reponsitory/@Service/@Controller 携带了上面注解的类都会被扫描到IOC容器内托管 - Configuration
任何一个标注了@Configuration 的 Java 类定义都是一个JavaConfig 配置类。而在这个配置类中,任何标注了@Bean 的方法,它的返回值都会作为 Bean 定义注册到Spring 的 IOC 容器,方法名默认成为这个 bean 的 id;
4. Spring Boot 自动配置原理是什么?
- 在复合注解SpringBootapplication中,包含EnableAutoConfiguration启动spring应用程序上下文的自动配置,EnableAutoConfiguration内会导入一个AutoConfigurationImportSelector类详细流程是这样:
(1)SpringApplication.run(AppConfig.class,args);执行流程,中有refreshContext(context);
(2)refreshContext(context);内部会解析我们的配置类上的标签.实现自动装配功能的注解@EnableAutoConfiguration
(3)会解析@EnableAutoConfiguration这个注解里面的@Import引入的配置类.AutoConfigurationImportSelector - 这个类会去读取spring.factories下key为EnableAutoConfiguration对应的全限定名的值;
- spring.factories里配置的所有key-value,是要告诉springBoot这个stareter所需要加载的XXXAutoConfiguraion类,也就是我们想要自动注入的bean;
下的getCandidateConfigurations()
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
// 核心代码
// 调用了方法:spring.core中的loadFactoryNames()
// 参数1--this.getSpringFactoriesLoaderFactoryClass()
// 参数2--this.getBeanClassLoader()
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.