@Primary 和 @Qualifier的区别

本文深入解析了Spring框架中解决多实现类注入问题的方法,详细介绍了@Primary和@Qualifier注解的使用场景及区别,帮助开发者在面对接口多实现时,能够正确地进行依赖注入。

  当一个接口有多个不同实现时,注入Spring的时候会产生org.springframework.beans.factory.NoUniqueBeanDefinitionException异常信息。
  解决方式有2种,使用@Primary 和 @Qualifier注解。

注解区别
@Primary优先注入该注解的标注的bean
@Qualifier确定注入该注解标定的bean

1、@Qualifier

  该注解的意思是直接注入该注解标定的bean,而非选择。如:

public interface ITeacher {
    String getName();
}
@Component
public class MathTeacher implements ITeacher {
    public String getName() {
        return "Math";
    }
}

@Component
public class EnglishTeacher implements ITeacher {
    public String getName() {
        return "English";
    }
}

  如果这个时候使用@Autowired就会报错,需要指定注入具体对象:

public class ClassRoom {
   @Autowired
   @Qualifier("englishTeacher")
   public ITeacher teacher;
}

2、@Primary

  @Qualifier是在使用注入的时候,使用方明确指出使用哪个;@Primary更像是提供方告诉你优先使用哪个。举个例子,你实现排序接口的很多的实例,如冒泡排序,快排,选择排序等等。在使用者选择不明确的情况下,你希望他优先(默认)选择冒泡排序。这样你就在冒泡排序实现类上使用@Primary予以标识。

public interface ISort {
    String getName();
}
@Component
@Primary
public class MaopaoSort implements ISort {
    public String getName() {
        return "冒泡排序";
    }
}

@Component
public class XuanzeSort implements ISort {
    public String getName() {
        return "选择排序";
    }
}
public class MySort {
   @Autowired
   public ISort sort;
}
TMS320VC5509A DSP开发板ALTIUM设计硬件原理图+PCB+封装库文件,2层板设计,大小为130x185mm,Altium Designer 设计的工程文件,包括完整的原理图及PCB文件,可以用Altium(AD)软件打开或修改,可作为你产品设计的参考。器件型号列表:16C5502N3906 PNP General Purpose Amplifier440068-1 USB 1.1, Right Angle, Thru-Hole, Reverse Type, Receptacle, 4 Position, BlackAD7249AD7321AT25F4096Bell Electrical BellCap Pol3 Polarized Capacitor (Surface Mount)Cap Semi Capacitor (Semiconductor SIM Model)D Connector 9 Receptacle Assembly, 9 Position, Right AngleDA_SECLET Diode Default DiodeEPM7128 Header 16X2A Header, 16-Pin, Dual rowHeader 2 Header, 2-PinHeader 20 Header, 20-PinHeader 20X2 Header, 20-Pin, Dual rowHeader 20X2H Header, 20-Pin, Dual row, Right AngleHeader 2X2 Header, 2-Pin, Dual rowHeader 3 Header, 3-PinHeader 30X2 Header, 30-Pin, Dual rowHeader 4 Header, 4-PinHeader 5X2 Header, 5-Pin, Dual rowHeader 6X2 Header, 6-Pin, Dual rowHeader 7X2 Header, 7-Pin, Dual rowHeader 8 Header, 8-PinInductor InductorKEY LED2 Typical RED, GREEN, YELLOW, AMBER GaAs LEDLT1764LV320AIC23 MAX3232EEAE ?5kV ESD-Protected, 3.0V to 5.5V, Low-Power, up to 250kbps, True RS-232 TransceiverMT48LC4M16OSC PWR2.5 Low Voltage Power Supply ConnectorPhonejack Stereo SW 3-Conductor Jack with 2 break contacts (normals) and 2 auxiliary make contactsREF5030_50 RES2 RPot PotentiometerRes Semi Semiconductor ResistorSMB SMB Straight ConnectorSW-PB SwitchSWITCH TMS320VC5509A TPS70102XTAL Crystal OscillatorZLG7289
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值