Spring注解是如何生效的?
Spring注解是如何生效的?
现在大部分开发已经采用Spring Boot了,少了很多配置文件,方便了许多。以前在使用注解,比如@Autowired、@Resource 或者事务相关的一些注解时,我们会首先在配置文件里面加入这样的配置:
context:component-scan
context:annotation-config
tx:annotation-driven
这样就能告诉Spring容器在启动的时候,把相应的后处理器(BeanPostProcessor)初始化,交给Spring容器来管理,然后通过这些后处理器 去实现 各种注解(的功能),比如实现:@Autowired 默认 按类型注入属性 。具体来说,@Autowired 是Spring框架提供的注解,它是由AutowiredAnnotationBeanPostProcessor 后处理器实现的;@Resource 是JDK里面提供的注解,它由CommonAnnotationBeanPostProcessor实现注入的功能。
那使用了Spring Boot之后,几乎已经看不到上述配置了,简单来说:Spring Boot应用程序在启动的时候,默认加载了一批BeanPostProcessor,这样就可以实现这些注解的功能了。这是怎么做到的呢?
我们知道,Spring Boot应用程序会在Application启动类中标上 @SpringBootApplication 注解。这个注解包含了三个子注解:
- SpringBootConfiguration 将Application启动类作为Bean类注入到Spring容器中
- EnableAutoConfiguration 实现自动配置功能
- ComponentScan 实现自动扫描的功能,具体来说:就是告诉Spring容器注册"一些"Bean后处理器,从而能够支持各种注解。
比如说,要想让@Autowired生效,Spring容器必须加载了AutowiredAnnotationBeanPostProcessor 后处理器,看这个类的源码注释:
A default AutowiredAnnotationBeanPostProcessor will be registered by the "context:annotation-config" and "context:component-scan" XML tags.
因此,只要我们在XML配置文件里面配置了 context:component-scan
,AutowiredAnnotationBeanPostProcessor 就能被注册到Spring容器中。而使用Spring Boot之后,由@SpringBootApplication注解下面的@ComponentScan 完成了同样的功能。这就是不需要我们自己在XML配置文件里面写一行 context:component-scan
配置的原因。
类似地:CommonAnnotationBeanPostProcessor 实现了 @Resource 注解的功能,看看它的类源码注释可知:它负责实现@PostConstruct、@PreDestroy、@Resource等注解,配置了 @ComponentScan 就能将它注册到Spring容器中。
最后再来说说开启事务的注解@EnableTransactionManagement:
当我们在Application启动类 上标注 @EnableTransactionManagement 时,就表示开启事务,它等价于XML配置方式 tx:annotation-driven
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
2016-04-02 字符串反转的进一步应用----单词反转