spring笔记-@Primary注解


1.问题

当一个接口有2个不同实现时,使用@Autowired注解时会报org.springframework.beans.factory.NoUniqueBeanDefinitionException异常信息

2.方案1-@Qualifier

使用Qualifier注解,选择一个对象的名称,通常比较常用

3. 方案2-@Primary

Primary可以理解为默认优先选择,同时不可以同时设置多个,
内部实质是设置BeanDefinition的primary属性

示例

@Component("metalSinger") // 加注解,让spring识别 public class MetalSinger implements Singer{ @Override public String sing(String lyrics) { return "I am singing with DIO voice: "+lyrics; } } @Primary @Component("operaSinger") public class OperaSinger implements Singer { @Override public String sing(String lyrics) { return "I am singing in Bocelli voice: "+lyrics; } } public interface Singer { String sing(String lyrics); } @Component public class SingerService { private static final Logger logger = LoggerFactory.getLogger(SingerService.class); @Autowired @Qualifier private Singer singer; public String sing(){ return singer.sing("song lyrics"); } public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext("context.annotation.primary"); SingerService singerService = context.getBean(SingerService.class); System.out.println(singerService.sing()); } }



免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM