品牌型号:联想ThinkPad X1
系统:Windows10家庭版
软件版本:Spring 5.3.7
很多新手在刚接触Spring Boot的时候,遇到像@SpringBootApplication、@RestController、@Autowired这些注解就有点摸不着头脑,很多伙伴只知道照着教程去敲,但是不明白注解到底是什么东西,背后又是怎么工作的,遇到配置不生效或者启动报错的时候就容易无从下手。我们搞清楚注解生效原理,不只是为了应付面试,更多是帮助自己在实际开发中看懂框架在做什么,出了问题也能有方向去排查。下面就给大家介绍一下什么是Spring Boot注解,Spring Boot注解怎么生效的相关内容。
一、什么是Spring Boot注解
注解本是Java给我们提供的一种元数据机制,写法上就是在类、方法或者字段前面用@符号加上注解名称,不少人误以为注解自带业务逻辑、能够直接执行代码。其实不是,它只是在代码上打了一个标记,告诉框架或者编译器这个地方需要做什么处理。

Spring Boot里的注解大部分都是在Spring框架原有基础上封装扩展来的,涵盖组件声明、依赖注入、请求映射、事务管理等多个方向,以常用的@Component为例,添加这个注解就代表告知Spring容器将此类交由容器管理,不需要手动去new对象了。

@RestController是@Controller和@ResponseBody两个注解合并之后的简化写法,Spring Boot里这类组合注解很多,目的是减少重复配置。

注解分Java语言本身自带的,比如我们在学习”继承“的时候遇到过的重写@Override,这种跟Spring没关系,此外就是Spring和Spring Boot自己定义的,它的实现是依赖Java反射机制,框架在运行时通过反射读取类上面挂着哪些注解,再根据注解类型去触发对应的处理逻辑。

二、Spring Boot注解怎么生效
注解生效的前提之一是保留策略设置为运行时可见,然后框架种得有对应的机制去主动扫描和处理它,Spring Boot启动的时候,入口是@SpringBootApplication这个注解,它内部组合了@EnableAutoConfiguration和@ComponentScan两个核心注解。@ComponentScan负责告诉框架从哪个包开始扫描,默认是主类所在的包以及它的子包,这也是为什么我们很多人把主类放错目录之后,注解就不生效的原因,扫描范围没覆盖到就相当于框架根本不知道那些类的存在。

配置好注解扫描后,Spring会读取类上面的注解信息,判断这个类需要做什么处理。比如发现有@Component或者它的衍生注解,就会把这个类注册成Bean交给容器管理,发现有@Autowired,就会在Bean初始化的时候自动注入对应的依赖,这些处理逻辑由Spring内部的BeanPostProcessor来执行,它在Bean的生命周期各个节点介入,根据注解类型触发不同的操作。

@EnableAutoConfiguration的作用是自动装配,它会读取各个依赖包里META-INF目录下的配置文件,把符合条件的配置类自动加载进来。这就是为什么我们引入一个Starter依赖之后不需要手动配置,对应的功能就能直接用,背后是自动装配机制替我们做了这些事。

以上就是什么是Spring Boot注解,Spring Boot注解怎么生效的全部内容了。我们理解了注解原理之后再回头看代码,很多之前觉得照着写就行的地方会清晰很多,注解它本身只是一个标记,真正让它发挥作用的是Spring框架背后那套扫描、解析、处理的机制。开发的时候我们用@ComponentScan配置注解扫描范围,BeanPostProcessor负责在生命周期里介入执行,自动装配则靠@EnableAutoConfiguration把各个依赖的配置拉进来,这几个环节只要有一个出了问题,注解就可能失效。