zoukankan      html  css  js  c++  java
  • 处理自动装配的歧义

    自动装配@autowired的时候,如果找到的类型匹配的bean的数量不唯一(比如实现了同一个接口的多个类),就会报出bean不唯一的异常,可以使用两种方法解决:

    1,设置bean的首选项,

    2,使用限定符(qualifier)来帮助Spring把bean限定在只有一个

    一、设置首选项

    对于自动检查的或者是java代码显示声明的,使用@Primary指定

    对于xml显示声明的,<bean id="" class="" primary="true"/>

    如果同一类,设置了多个首选项,那就跟没有设置一样。

    二、限定符

    限定符使用@Qualifier注解来实现,如果@primary的直接有多个,就需要使用限定符来解决歧义。

    在@autoWired的位置增加@Qualifier("string")来限定使用哪一个类进行注入。String就是限定符的字符串。

    对于每一个类而言,默认的限定符就是类名字本身(首字母变为小写),为了解决耦合问题(类名改了怎么办),我们可以指定每一个类的限定符:

    在@Component和@Bean下面使用@Qualifier("string")指定类的限定符。

    但是如果两个类的指定限定符一样怎么办?不能在重复在添加一个限定符了。这个时候就可以使用自定义的注解来进行限定

    @Target({ElementType.CONSTRUCTOR,ElementType.FIELD,ElementType.METHOD,ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Qualifier
    public @interface cusAno {
    }
    //对于bean使用注解 @Component @cusAno
    public class B implements inter{ public void play(){ System.out.println("b-play"); } }
    //在自动注入的位置使用注解来限定 @Autowired @cusAno
    public A(inter w) { this.b = w; }
  • 相关阅读:
    锋利的jQuery(第二版)源码下载地址
    sql(SqlServer)编程基本语法
    struts2 中请求转发与请求重定向方法
    struts2的DevMode(开发模式)模式
    ML—朴素贝叶斯
    python 全排列
    简单读懂人工智能:机器学习与深度学习是什么关系
    Postfix接收邮件后转向运行特定的脚本
    Android的View和ViewGroup分析
    简明 状态模式(5.8)
  • 原文地址:https://www.cnblogs.com/Coder-Pig/p/7238317.html
Copyright © 2011-2022 走看看