SpringBoot2.1.1启动流程 - 核心注解概述

开篇序

Springboot启动时只需用到一个@SpringBootApplication注解,这也迎合了Springboot的约定大于配置的理念。

那么@SpringBootApplication注解到底有什么神奇之处,曾经配置繁琐的Spring Framework 又是如何一步登天变成一键启动的呢?

这些背后的神奇之处也让我很好奇,所以准备写一套系列专题,探索一下springboot启动流程的方方面面。

第一章 核心注解概述

那些繁琐的xml消失了,取而代之的是一个有一个,一层又一层的注解,为什么说一层又一层呢,我们举个例子:

SpringBoot2.1.1启动流程 - 核心注解概述_第1张图片

点击@SpringBootApplication注解我们可以看到它是由@EnableAutoConfiguration@SpringBootConfiguration等注解组成

SpringBoot2.1.1启动流程 - 核心注解概述_第2张图片

@EnableAutoConfiguration注解又是由下面的注解组成

SpringBoot2.1.1启动流程 - 核心注解概述_第3张图片

所以我们接下来梳理一下注解的基本原理和spring核心注解含义

元注解
@Target({ElementType.TYPE})

注解的作用范围

@Target(ElementType.TYPE)   //接口、类、枚举、注解
@Target(ElementType.FIELD) //字段、枚举的常量
@Target(ElementType.METHOD) //方法
@Target(ElementType.PARAMETER) //方法参数
@Target(ElementType.CONSTRUCTOR)  //构造函数
@Target(ElementType.LOCAL_VARIABLE)//局部变量
@Target(ElementType.ANNOTATION_TYPE)//注解
@Target(ElementType.PACKAGE) //包

元注解
@Retention(RetentionPolicy.RUNTIME)

//注解仅存在于源码中,在class字节码文件中不包含

@Retention(RetentionPolicy.SOURCE)  

// 默认策略,注解会在class字节码文件中存在,但运行时无法获得
@Retention(RetentionPolicy.CLASS) 

 // 注解会在class字节码文件中存在,在运行时可以通过反射获取到
@Retention(RetentionPolicy.RUNTIME) 

元注解
@Documented
标注注解的地方会包含在javadoc中
元注解
@Inherited
子类可以继承父类的注解,只能作用在类注解上
@Import({AutoConfigurationImportSelector.class})

字面上import是导入的意思,实际意义是将依赖的第三方bean导入到配置该注解的类中。

当你没有用@Bean @Service @Controller之类的注解的时候,如果你希望注入一个类的时候,就使用import注解注入到ioc容器。

获取bean的方式

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("com.xxx");

XXX xxx = context.getBean(XXX.class);

xxx.dosth();

@AutoConfigurationPackage
指示应该注册包含注释类的包
@EnableAutoConfiguration

允许使用自动装配

主要逻辑是使用工厂模式从META-INF/spring.factories中加载所有的需要的配置类

@ComponentScan()

扫描组件

扫描的时候可以自己加上包的路径:

@AliasFor("basePackages")
String[] value() default {};

@AliasFor注解主要是起一个别名,例如basepackage,他能让人们更方便的理解注解里的参数有什么意义

例如:

@ComponentScan(basePackages = "com.happyland.happylandcustomer.test")
@SpringBootApplication
启动类注解

 

此外SpringBoot延续了Spring Framework的几种组件注解

@Repository 数据接口注解,也就是我们常说的Dao注解
@Component 通用组件注解
@Service 服务注解
@Controller 控制器注解
@Configuration 配置类注解
@ExceptionHandler 异常处理注解

这些也就是我们所说的模式注解【用于在spring应用中扮演组件角色的注解】

当我们对这些注解有了一个初步印象的时候,下一章我们就要开始深入springboot的启动流程了

你可能感兴趣的:(Spring,Boot)