开篇序
Springboot启动时只需用到一个@SpringBootApplication注解,这也迎合了Springboot的约定大于配置的理念。
那么@SpringBootApplication注解到底有什么神奇之处,曾经配置繁琐的Spring Framework 又是如何一步登天变成一键启动的呢?
这些背后的神奇之处也让我很好奇,所以准备写一套系列专题,探索一下springboot启动流程的方方面面。
第一章 核心注解概述
那些繁琐的xml消失了,取而代之的是一个有一个,一层又一层的注解,为什么说一层又一层呢,我们举个例子:
点击@SpringBootApplication注解我们可以看到它是由@EnableAutoConfiguration@SpringBootConfiguration等注解组成
@EnableAutoConfiguration注解又是由下面的注解组成
所以我们接下来梳理一下注解的基本原理和spring核心注解含义
| 注解的作用范围 @Target(ElementType.TYPE) //接口、类、枚举、注解 |
| //注解仅存在于源码中,在class字节码文件中不包含 @Retention(RetentionPolicy.SOURCE) // 默认策略,注解会在class字节码文件中存在,但运行时无法获得 // 注解会在class字节码文件中存在,在运行时可以通过反射获取到 |
| 标注注解的地方会包含在javadoc中 |
| 子类可以继承父类的注解,只能作用在类注解上 |
| 字面上import是导入的意思,实际意义是将依赖的第三方bean导入到配置该注解的类中。 当你没有用@Bean @Service @Controller之类的注解的时候,如果你希望注入一个类的时候,就使用import注解注入到ioc容器。 获取bean的方式 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("com.xxx"); XXX xxx = context.getBean(XXX.class); xxx.dosth(); |
| 指示应该注册包含注释类的包 |
| 允许使用自动装配 主要逻辑是使用工厂模式从META-INF/spring.factories中加载所有的需要的配置类 |
| 扫描组件 扫描的时候可以自己加上包的路径: 例如: |
| 启动类注解 |
此外SpringBoot延续了Spring Framework的几种组件注解
@Repository | 数据接口注解,也就是我们常说的Dao注解 |
@Component | 通用组件注解 |
@Service | 服务注解 |
@Controller | 控制器注解 |
@Configuration | 配置类注解 |
@ExceptionHandler | 异常处理注解 |
这些也就是我们所说的模式注解【用于在spring应用中扮演组件角色的注解】
当我们对这些注解有了一个初步印象的时候,下一章我们就要开始深入springboot的启动流程了