在Spring的生态中,借助@Autowired
注解来实现依赖注入,可以说是非常普遍的事情了,如果让我们自定义一个注解,也实现类似的功能,那么我们可以怎么做呢?
本文介绍如何实现一个自定义的@Autowired
,实现依赖服务注入
主要知识点:
BeanPostProcessor
- 代理类创建
I. 项目环境
本项目借助SpringBoot 2.2.1.RELEASE
+ maven 3.5.3
+ IDEA
进行开发
下面是核心的pom.xml
(源码可以再文末获取)
1 | <!-- 这个依赖是干嘛的,后文会介绍 --> |
II. 实现姿势
1. 代理封装类
借助Spring的Enhance
来实现代理类生成,比如一个基础的工具类如下,用于自定义注入的增强
1 | public class ProxyUtil { |
2. 自定义注解
参照@Autowired
的定义,实现一个自定义的注解(缩减版)
1 | ({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE}) |
3. 自定义注入
实现BeanPostProcessor
,在bean初始化之后,扫描field/method
,为了做一个区分,下面创建一个代理类,注入依赖
1 |
|
4. 测试
接下来验证一下自定义注入方式
1 |
|
执行完毕之后,输出日志如
1 | do before calculate | Thread[main,5,main] |
II. 其他
0. 项目
- 工程:https://github.com/liuyueyi/spring-boot-demo
- 项目:https://github.com/liuyueyi/spring-boot-demo/tree/master/spring-case/010-auto-inject
1. 一灰灰Blog
尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
下面一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
- 一灰灰Blog个人博客 https://blog.hhui.top
- 一灰灰Blog-Spring专题博客 http://spring.hhui.top
Be the first person to leave a comment!