这次看下spring中少见的注解@primary注解,例子

  1. @Component
  2. public class MetalSinger implements Singer{
  3. @Override
  4. public String sing(String lyrics) {
  5. return "I am singing with DIO voice: "+lyrics;
  6. }
  7. }
  1. public class OperaSinger implements Singer {
  2. @Override
  3. public String sing(String lyrics) {
  4. return "I am singing in Bocelli voice: "+lyrics;
  5. }
  6. }

这两个类都实现了singer接口

  1. public interface Singer {
  2. String sing(String lyrics);
  3. }

那么来个注入的:

  1. @Component
  2. public class SingerService {
  3. private static final Logger logger = LoggerFactory.getLogger(SingerService.class);
  4. @Autowired
  5. private Singer singer;
  6. public String sing(){
  7. return singer.sing("song lyrics");
  8. }
  9. }

那么最后输出应该是:I am singing with DIO voice: song lyrics.

原因是只有MetalSinger使用了注解@component,那么autowird会只寻找这个标记的 
进行注入: 
  如果也在OperaSinger 中使用了注解,则spring会报异常,不知道到底应该用 
哪个: 
  org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [main.service.Singer] is defined: expected single matching bean but found 2: metalSinger,operaSinger

以上报错因为根据bean的值找到对应两个类导致冲突; 如果某个@component("singer") ,spring就能默认找到bean名称,而确定注入哪一个实现类

而如果要让spring知道必须注入的是OperaSinger ,则可以用@primary注解告诉 
spring:

    1. @Primary
    2. @Component
    3. public class OperaSinger implements Singer{
    4. @Override
    5. public String sing(String lyrics) {
    6. return "I am singing in Bocelli voice: "+lyrics;
    7. }
    8. }

最新文章

  1. 关于linux服务器上搭建ftp服务的流程
  2. error C2678
  3. ASP.NET Misconfiguration: Excessive Session Timeout
  4. python 环境安装
  5. python import eventlet包时提示ImportError: cannot import name eventlet
  6. repo: 创建local manifest以及如何添加app到CM/Android build系统中
  7. 关于javascript里面仿python切片操作数组的使用方法
  8. 分布式内存对象缓存系统Memcached-Linux下使用
  9. SDUT 3258 Square Number 简单数学
  10. c++ - fcgio.cpp:50: error: 'EOF' was not declared in this scope - Stack Overflow
  11. spring mvc 参数传递的三种方式
  12. mac版mysql配置
  13. 字节输入流:io包中的InputStream为所有字节输入流的父类。
  14. 易捷支付完整业务流程的lr脚本编写
  15. MySQL命令:约束
  16. 自建yum源解决Ceph搭建过程中从官网取包慢的问题
  17. Fedora Redhat Centos 有什么区别和关系?
  18. .NET Core改造工程直播
  19. iOS- Swift和Object-C的混合编程
  20. oracle 创建视图、修改视图、删除视图、利用视图操作基本表

热门文章

  1. 正整数序列 Help the needed for Dexter ,UVa 11384
  2. 记录一次kafka解决相同userId顺序消费的问题
  3. Integer源码解析
  4. Linux修改主机名方法
  5. 在论坛中出现的比较难的sql问题:34(递归 获取连续值问题)
  6. ASP.NET Core 2.1 中的 HttpClientFactory (Part 1) HttpClientFactory介绍
  7. openssl 证书cert与key合并pfx
  8. md5 helper
  9. jQuery遍历(3)
  10. 【实战】Apache shiro<=1.2.4 getshell