其中重要的是@EnableAutoConfiguraion
下面从元注解开始解释他们分别的含义
其中 @Target @Retention@Ducumented@Inherited四个注解为元注解,即注解的注解
@Target
表示该注解的作用范围。ElementType是个enum(枚举),内容如下:
TYPE:接口、类、枚举
FIELD:字段、枚举的常量
METHOD:方法
PARAMETER:方法参数
CONSTRUCTOR:构造函数
LOCAL_VARIABLE:局部变量
ANNOTATION_TYPE:注解
PACKAGE:包@Target({ElementType.TYPE})则表示该注解的作用范围为类、接口(包括注释类型)或枚举声明
@Retention
表示该注解的生命周期
SOURCE :只在我们敲代码的时候存在,javac进行编译时就消失。
例如:
@Override注解CLASS:
在javac编译成class文件时还存在,jvm进行加载时就会消失。默认形式
RUNTIME:
在运行时也保留的注解,始终不会消失。
@Ducumented
表示在 javadoc 工具为类生成帮助文档时保留其注解信息
即javadoc -d doc {类名}.java操作生成帮助文档时,保留该注解。
@Inherited
表示被该注解表示的类,其子类自动包含该注解。
@SpringBootConfiguration
和Spring中@configuration几乎没有区别
唯一的区别在于他多了一个@indexed注解
的作用是在当@ComponentScan扫描的类很多的时候,Spring启动时模式注释解析的时间会变得很长。为解决这问题在Spring Boot2.0底层核心框架Spring Framework5.0中引入了该注解,为Spring模式注释解析添加索引,以提升启动的性能。
@EnableAutoConfiguraion
先从@AutoConfigurationPackage 开始看
点开@AutoConfigurationPackage
先通过@ComponentScan 扫描再通过@AutoConfigurationPackage 进行注册
核心 @Import({AutoConfigurationImportSelector.class})
刚刚已经进行了扫描和注册,现在需要进行加载这些配置了。
在SpringBoot2.2版本中
所有的自动配置文件都在spring-boot-autoconfigure里面的META-INF的spring.factories文件里面
里面是全部的配置文件,那么他如何进行选择的呢?
其中有个核心注解@ConditionalXXX 该条件满足 即加载
简单来说,按需加载,根据我们pom文件中的dependency,进行选择性加载。
谈谈SpringBoot中run的方法
SpringApplication做了啥事情
1.判断这个项目是普通还是web项目。
tip:①.普通项目启动完就结束,web项目会一直启动
②.在SSM框架中,打的是war包,再放到tomcat中启动;在springboot项目会内嵌tomcat,默认打的是jar包,也可以在pom文件中去掉内嵌的tomcat,然后打war包放tomcat中启动。
③.jar包启动方式是 java -jar XXX.jar
2.查找并加载所有的初始化器。
3.查找并加载所有的程序的监听器。
4.推断并设置当前的主类(即main方法的定义类)。
5.全面接管SpringMVC的自动装配。