使用CustomAutowireConfigurer自定义qualifier注解
这其实属于一个骚操作(不明觉厉但然并卵),炫技用,绝大部分情况下都是木有必要这么做的。但是话说回来,如果这么玩了,说不定能成为你面试的砝码,毕竟面试还是需要造飞机嘛,因此此处我写一个案例Demo供给大家参考~
如果你通过本实例助攻获取到了一个offer,不要忘记请我吃饭哦,哈哈~~~
其实通过上面实例已经知道了QualifierAnnotationAutowireCandidateResolver它是支持添加我们自定义的qualifier注解类型的,原理就是它,我们只是想办法往里添加就成,此处Spring给我们提供了CustomAutowireConfigurer来达到这一点。
由于CustomAutowireConfigurer的源代码非常的简单,因此此处就不再展示了,提示使用时注意如下两点就行:
- Set<?> customQualifierTypes这个set里面可以是Class类型,也可以是全类名的String类型
- 不管是什么类型,必须是annotation type(注解类型)
示例Demo:
// 1、定义一个自定义的注解(可以不要任何属性) @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface MyQualifier { String value() default ""; } // 2、定义Bean CustomAutowireConfigurer @Configuration public class RootConfig { @Bean public CustomAutowireConfigurer customAutowireConfigurer() { CustomAutowireConfigurer configurer = new CustomAutowireConfigurer(); configurer.setOrder(Ordered.LOWEST_PRECEDENCE); configurer.setCustomQualifierTypes(Collections.singleton(MyQualifier.class)); return configurer; } }
只需要简单的两步,我们自定义的注解@MyQualifier就有和@Qualifier一样的效果,可以正常使用了~
附:这个小知识可以顺带了解一下:
@Required最先执行,其次@Autowoired,最后@Resource。
@Required注解需要应用到Bean的属性的setter方法上面。 (不开玩笑的说:其实这个注解很少使用~)
总结
依赖注入作为Spring框架的核心内容之一,弄懂了它你就已经掌握了一半(夸张了)。
我经常说,衡量一个开源框架是否优秀主要是看它解决了多少非功能性问题,显然Spring框架就这这样一款解决了非常非常多非功能性问题的流行框架~
The last:如果觉得本文对你有帮助,不妨点个赞呗。当然分享到你的朋友圈让更多小伙伴看到也是被作者本人许可的~