Spring 注解实现Bean依赖注入之@Qualifier

news/2025/1/25 21:15:01

@Qualifier:限定描述符,用于细粒度选择候选者;

@Autowired默认是根据类型进行注入的,因此如果有多个类型一样的Bean候选者,则需要限定其中一个候选者,否则将抛出异常

@Qualifier限定描述符除了能根据名字进行注入,更能进行更细粒度的控制如何选择候选者,具体使用方式如下:

@Qualifier(value = "限定标识符")  

用通俗的语言来讲:就是spring使用@Autowired对bean进行注入时,正常情况下,类不会同名,则没有问题,但是在有同类型的类存在时,spring就不知道要自动注入哪一个了,这个时候,你就要显示的告诉spring,你要让他自动注入哪个

例如在springboot中,我们经常会定义定义一个Bean,返回的类型是一个接口类型,这个时候,再进行注入时,就要显示的告诉,如下:

@Configuration
@EnableWebSecurity
public class DemoApplicationConfiguration extends WebSecurityConfigurerAdapter {private Logger logger = LoggerFactory.getLogger(DemoApplicationConfiguration.class);@Override@Autowiredpublic void configure(AuthenticationManagerBuilder auth) throws Exception {auth.userDetailsService(myUserDetailsService());}@Beanpublic UserDetailsService myUserDetailsService() {InMemoryUserDetailsManager inMemoryUserDetailsManager = new InMemoryUserDetailsManager();//do something.....return inMemoryUserDetailsManager;}}

上面是springboot系统中我们自己定义的一个配置类,在配置类中,我们又定义了一个Bean,这个Bean的类型是

UserDetailsService,UserDetailsService是一个接口, 而在实际的默认的包中,也有实现了UserDetailsService 的Bean,这个时候,若是有下面的代码:

@Autowired
private UserDetailsService userDetailsService;

就会出现异常,框架不知道这里要注入的是我们自己写的,还是myUserDetailsService这个bean,还是之前存在的类,这个时候,就需要修改成如下:

    @Qualifier("myUserDetailsService")@Autowiredprivate UserDetailsService userDetailsService;

即告诉框架,这里要注入的是我自己定义的myUserDetailsService 这个Bean


https://dhexx.cn/news/show-4151902.html

相关文章

freemarker获取list索引值

freemarker中遍历list获取索引值 <#list currentPathList as path><#if path_index 0></#if> </#list> as 后面的那个变量&#xff0c;加上_index&#xff0c;就可以表示当前循环到第几项

浅谈redis缓存及缓存雪崩的处理

目录 前言 代码分析 第一种代码案例&#xff1a; 第二种方案&#xff0c;加锁 第三种方案&#xff1a;semaphore实现共享锁 第四种方案&#xff1a;基于DCL&#xff08;Double Check Lock&#xff09;模式&#xff0c;结合Semaphore&#xff0c;再次进一步对代码进行优化。…

css控制div的子元素不换行

需求&#xff1a;如题&#xff1a; <div style"white-space:nowrap"><input typetext style"display:inline;width:180px;" ></input><button type"button" class"btn btn-default">确定</button></…

java代码获得文件的MD5

目录 什么是文件的MD5? java代码获得MD5的几种方式 方法一&#xff1a; 方法二&#xff1a; 方法三&#xff1a; 方法四&#xff1a; 方法五&#xff1a; 总结 什么是文件的MD5? MD5是文bai件签名&#xff0c;相当于我们的身份du证 独一无二的。MD5在论坛上、软件发布…

Redis的事务性

简介&#xff1a; Redis我们常常称其为内存数据库&#xff0c;而在传统的关系型数据库中&#xff0c;事务性又是不得不面临的一个问题&#xff0c;所谓事物性&#xff0c;说简单点&#xff0c;就是一组数据库操作之间是有关联关系的&#xff0c;要么全部都执行成功&#xff0c…

java 查询字符串中首个数字出现的位置

/*** 查询字符串中首个数字出现的位置* param str 查询的字符串* return 若存在&#xff0c;返回位置索引&#xff0c;否则返回-1&#xff1b;*/public static int findFirstIndexNumberOfStr(String str){int i -1;Matcher matcher Pattern.compile("[0-9]").matc…

Java 从List中删除空值

1. Java 7或更低版​​本&#xff1a;list.removeAll(Collections.singleton(null)); 2. Java 8或更高版本(推荐): public void removeAllNullsFromListWithJava8() {List<String> list new ArrayList<>(Arrays.asList("A", null, "B", nul…

nginx部署 上传文件提示413 Request Entity Too Large错误

现象&#xff1a; 在开发中&#xff0c;用nginx作为代理服务器进行web项目部署&#xff0c;在上传Excel文件时&#xff0c;出现如下错误&#xff1a; 原因&#xff1a; 这是因为nginx在默认的设置网页上传文件的最大值是1M client_max_body_size 1M #设置网页上传文件的最大…

nginx 报 upstream sent too big header while reading response header from upstream

场景&#xff1a; 以Nginx作为代理服务器进行负载均衡处理&#xff0c;发布项目为一个互联网项目&#xff0c;在进行一个接口调用时&#xff08;此接口为上传Excel并解析&#xff0c;解析的一部分数据会在后端存储到cookie中&#xff09;。 正常上传Excel是没问题的&#xff…

Java POI解析Excel的跨Sheet读取数据验证下拉值

存在一个Excel文件&#xff0c;其中有列数据是下拉选择&#xff0c;且下拉的来源是在另外一个Sheet中 这个时候&#xff0c;我们使用POI对其进行解析&#xff0c;想获得数据验证的个数&#xff1a;sheet.getDataValidations() public static void main(String[] args) throws E…