• spring中少用的注解@primary解析


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

    Java代码  收藏代码
    1. @Component  
    2. public class MetalSinger implements Singer{  
    3.   
    4.     @Override  
    5.     public String sing(String lyrics) {  
    6.         return "I am singing with DIO voice: "+lyrics;  
    7.     }  
    8. }  



     

    Java代码  收藏代码
    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接口 
     

    Java代码  收藏代码
    1. public interface Singer {  
    2.     String sing(String lyrics);  
    3. }  


      那么来个注入的: 

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


       那么最后输出应该是: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: 
      

    Java代码  收藏代码
      1. @Primary  
      2. @Component  
      3. public class OperaSinger implements Singer{  
      4.   
      5.     @Override  
      6.     public String sing(String lyrics) {  
      7.         return "I am singing in Bocelli voice: "+lyrics;  
      8.     }  
      9. }  
  • 相关阅读:
    IDEA去除代码重负导致的波浪黄线
    java代码里出现中文乱码怎么解决
    准备接入个人支付接口?看完这几款支付产品再做决定!
    个人网站选择支付宝api
    PayPay猪 文档中心
    如何让input的值根据select改变
    Visual Studio运行VC++
    腾讯视频转mp4
    重要网址
    ANSYS笔记本
  • 原文地址:https://www.cnblogs.com/renjiaqi/p/11576353.html
Copyright © 2020-2023  润新知