Spring依赖注入(DI)核心接口AutowireCandidateResolver深度分析,解析@Lazy、@Qualifier注解的原理【享学Spring】(下)

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: Spring依赖注入(DI)核心接口AutowireCandidateResolver深度分析,解析@Lazy、@Qualifier注解的原理【享学Spring】(下)

使用CustomAutowireConfigurer自定义qualifier注解


这其实属于一个骚操作(不明觉厉但然并卵),炫技用,绝大部分情况下都是木有必要这么做的。但是话说回来,如果这么玩了,说不定能成为你面试的砝码,毕竟面试还是需要造飞机嘛,因此此处我写一个案例Demo供给大家参考~


如果你通过本实例助攻获取到了一个offer,不要忘记请我吃饭哦,哈哈~~~


其实通过上面实例已经知道了QualifierAnnotationAutowireCandidateResolver它是支持添加我们自定义的qualifier注解类型的,原理就是它,我们只是想办法往里添加就成,此处Spring给我们提供了CustomAutowireConfigurer来达到这一点。


由于CustomAutowireConfigurer的源代码非常的简单,因此此处就不再展示了,提示使用时注意如下两点就行:


  1. Set<?> customQualifierTypes这个set里面可以是Class类型,也可以是全类名的String类型
  2. 不管是什么类型,必须是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一样的效果,可以正常使用了~


附:这个小知识可以顺带了解一下:

image.png


@Required最先执行,其次@Autowoired,最后@Resource。


@Required注解需要应用到Bean的属性的setter方法上面。 (不开玩笑的说:其实这个注解很少使用~)


总结


依赖注入作为Spring框架的核心内容之一,弄懂了它你就已经掌握了一半(夸张了)。

我经常说,衡量一个开源框架是否优秀主要是看它解决了多少非功能性问题,显然Spring框架就这这样一款解决了非常非常多非功能性问题的流行框架~


The last:如果觉得本文对你有帮助,不妨点个赞呗。当然分享到你的朋友圈让更多小伙伴看到也是被作者本人许可的~

相关文章
|
12天前
|
XML Java 数据格式
SpringBoot入门(8) - 开发中还有哪些常用注解
SpringBoot入门(8) - 开发中还有哪些常用注解
31 0
|
19天前
|
XML JSON Java
SpringBoot必须掌握的常用注解!
SpringBoot必须掌握的常用注解!
42 4
SpringBoot必须掌握的常用注解!
|
16天前
|
存储 安全 Java
springboot当中ConfigurationProperties注解作用跟数据库存入有啥区别
`@ConfigurationProperties`注解和数据库存储配置信息各有优劣,适用于不同的应用场景。`@ConfigurationProperties`提供了类型安全和模块化的配置管理方式,适合静态和简单配置。而数据库存储配置信息提供了动态更新和集中管理的能力,适合需要频繁变化和集中管理的配置需求。在实际项目中,可以根据具体需求选择合适的配置管理方式,或者结合使用这两种方式,实现灵活高效的配置管理。
12 0
|
2月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
1月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
168 2
|
3月前
|
缓存 Java Maven
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
|
14天前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
27 2
 SpringBoot入门(7)- 配置热部署devtools工具
|
10天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
21 2
|
1月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
56 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
1月前
|
XML Java 应用服务中间件
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
180 2

热门文章

最新文章