在Spring Boot的定义中有这么一句:Spring Boot基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。所以今天了解一下Spring Boot的配置文件、自动配置原理以及流程。
目录
Spring Boot中的配置文件
简介
Spring Boot使用全局配置文件,而且配置文件名是固定的application。
两种形式:
1. application.properties
2. application.yml (application.yaml)
配置文件的作用:
修改SpringBoot自动配置的默认值;
SpringBoot在底层都给我们自动配置好;
标记语言:
以前的配置文件;大多都使用的是 xxxx.xml文件;
YAML:以数据为中心,比json、xml等更适合做配置文件;
Spring Boot自动配置原理
追踪源码
首先一个Spring Boot程序都是从一个主程序类开始的
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
1. @SpringBootApplication注解是Spring Boot的核心注解,它其实是一个组合注解,源码如下:
@SpringBootApplication = (默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan
所以当我们将Application.class作为JavaConfig配置类传入SpringApplication.run方法之后, SpringApplication.run方法就知道从哪里加载并扫描必要的bean定义了。
其中:
@Configuration的注解类标识这个类可以使用Spring IoC容器作为bean定义的来源。@Bean注解告诉Spring,一个带有@Bean的注解方法将返回一个对象,该对象应该被注册为在Spring应用程序上下文中的bean。
@ComponentScan这个注解在Spring中很重要,它对应XML配置中的元素,@ComponentScan的功能其实就是自动扫描并加载符合条件的组件(比如@Component和@Repository等)或者bean定义,最终将这些bean定义加载到IoC容器中。
@EnableAutoConfiguration注解也是一个派生注解,其中的关键功能由@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是一个xxxxAutoConfiguration的类名的列表,这些类名以逗号分隔,如下图所示:
Spring Boot自动配置流程
在Spring Boot的主程序类中,剩下的就是要搞清楚SpringApplication.run里面发生了什么
图片来源于:https://afoo.me/posts/2015-07-09-how-spring-boot-works.html
所以简而言之SpringBoot的加载流程总结如下:
1)在META-INF\spring.factories文件中定义了许多自动配置类 ,可以根据在pom.xml文件中添加的启动器依赖自动配置组件;
2)通过如下流程可以去修改application配置文件,改变自动配置组件默认参数:
Lombok组件的使用
使用Lombok的注解实现pojo类的简化,lombok是个插件工具包,提供了一些注解@Data @Getter等,这些注解去简化实体类中的构造方法get/set等方法的编写。
使用步骤
1)在IDEA中安装lombok插件,install就行了
2)添加Lombok对应的依赖到pom.xml文件中
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
3)改造实体类使用lombok注解,此处对应连接数据库时的实体类用了@Data注解就可以省略以往的get/set方法
import lombok.Data;
@Data
public class User {
private Integer id;
private String username;
private String password;
private Double money;
}
因为@Data方法在编译阶段会根据注解自动生成对应的方法,data包包含get/set/hashcode/equals/toString等方法
Lombok小结,在Bean上使用:
@Data---自动提供getter setter hashcode equals toString等
@Getter---自动提供getter方法
@Setter---自动提供setter方法
@Slf4j---自动在Bean中提供log变量,其中用的是slf4j的日志功能
今天家里有个别人家的小姑娘在我家玩,吵吵闹闹一天真的是学不进去,噗,果然凭实力单身真的不会照顾小孩子这种生物~