Spring高级特性之一: Aware之ApplicationContextAware
Spring
的依赖注入的最大亮点就是所有的Bean
对Spring
容器的存在是没有意识的,所以可以将容器替换成别的容器。但是在实际的项目中,不可避免的要用到Spring
容器本身的功能资源,这时候Bean
必须要意识到Spring
容器的存在,才能调用Spring
所提供的资源,这就是所谓的Spring
Aware
。其实Spring
Aware
本来就是Spring
设计用来框架内部使用的,若使用了Spring
Aware
,Bean
将会和Spring
框架耦合。
Spring Aware的目的就是为了让Bean获得Srping容器的服务。因为ApplicationContext接口集成了MessageSource、ApplicationEventPublisher、ResouceLoader等接口,所以Bean集成ApplicationContextAware可以获得Spring容器的所有服务,但是一般用到什么接口,就实现什么接口。
常用到的Aware接口:
下面具体案例示例Aware在自定义注解中的应用:
需求:客户端远程调用服务端提供根据ID查询user对象的方法。
分析:客户端和服务器端之间必须约定访问接口,所以必须创建一个接口定义抽象方法。由于注入Spring容器中的Bean除了该接口实现类外还有很多其他的类,那么服务器端如何将客户端访问的API快速地从容器中匹配到呢?通常情况下,使用getBean(classname)获得bean实例。如果需match客户端提供的classname得遍历整个applicationcontext进行比较,这个效率too low。
解决方案:ApplicationContextAware+自定义注解。其核心思想就是缩小match的范围,大致逻辑为:
1)自定义注解标注客户端与服务器端约定的API实现;
2)通过ApplicationContextAware获得该容器applicationContext获得所有自定义注解的bean进行缓存。
这样即使遍历也只是遍历客户端与服务器端约定的Bean,很大程度缩小了match的范围。
具体实现:
1、自定义注解:对于自定义注解标记的类实例可以注入到容器中,此处使用了spring可识别的注解之一@Service,相当于重新包装了@Service。
2、API实现类添加注解
3、使用ApplicationContextAware处理业务逻辑
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?