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; }
  • 相关阅读:
    搭建SSM框架之Spring
    手动编写第一个tomcat项目
    电信宽带运营支撑系统
    Java反射
    枚举
    类、枚举与接口
    (总结4)HTML5中如何自定义属性
    (总结3)HTML5中获取元素新增的dom方法以及类名操作
    (总结2)HTML5中新增加的音频/视频标签
    (总结1)HTML5中新增加的表单元素
  • 原文地址:https://www.cnblogs.com/Coder-Pig/p/7238317.html
Copyright © 2011-2022 走看看