`

spring中少用的注解@primary解析

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

@Component
public class MetalSinger implements Singer{

    @Override
    public String sing(String lyrics) {
        return "I am singing with DIO voice: "+lyrics;
    }
}



 
public class OperaSinger implements Singer {
    @Override
    public String sing(String lyrics) {
        return "I am singing in Bocelli voice: "+lyrics;
    }
}


  这两个类都实现了singer接口
 
public interface Singer {
    String sing(String lyrics);
}


  那么来个注入的:
@Component
public class SingerService {
    private static final Logger logger = LoggerFactory.getLogger(SingerService.class);

    @Autowired
    private Singer singer;

    public String sing(){
        return singer.sing("song lyrics");
    }
}


   那么最后输出应该是: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
   而如果要让spring知道必须注入的是OperaSinger ,则可以用@primary注解告诉
spring:
  
@Primary
@Component
public class OperaSinger implements Singer{

    @Override
    public String sing(String lyrics) {
        return "I am singing in Bocelli voice: "+lyrics;
    }
}


   
      
3
0
分享到:
评论
2 楼 lisanshao 2017-10-19  
kris_zhang 写道
如果有多个@Primary 会怎么样?

指定@Qualifier("XXX"),AutoWared时使用该指定的Bean id
1 楼 kris_zhang 2017-06-01  
如果有多个@Primary 会怎么样?

相关推荐

    Spring @Primary和@Qualifier注解原理解析

    如果我们不使用@Primary注解,那么在测试类中注入Sheet类型的bean时,Spring容器不知道该加载哪个bean,会出现歧义问题。但是,如果我们在SheetB上添加@Primary注解,那么Spring容器就会优先加载SheetB Bean。 @...

    Spring demo 自动检测注解

    在Spring框架中,自动检测注解(Autowired)是核心特性之一,它极大地简化了依赖注入的过程,使得开发者能够更加专注于业务逻辑,而不是繁琐的配置。本文将深入探讨Spring中的自动检测注解及其工作原理。 首先,`@...

    对Spring中注解怎么实现的一些基本原理

    本文将深入探讨Spring注解的基本原理,包括它们如何被解析、处理以及如何影响应用程序的生命周期。 首先,我们需要了解注解在Java语言中的本质。注解是一种元数据,允许程序员在源代码中嵌入信息,这些信息可以被...

    模拟Spring的IoC容器实现注解自动装配

    Spring中的@Autowired注解可以用于字段、方法或参数级别,表示需要自动装配的依赖。在我们的模拟实现中,我们需要一个注解处理器来扫描带有@Autowired注解的元素,并尝试找到匹配的bean进行装配。这需要实现以下步骤...

    java毕业设计&课设-spring源码深度解析+注解开发全套视频教程(视频+源码).doc

    #### 三、Spring注解开发详解 ##### 3.1 注解概述 - **元注解**:用于修饰其他注解的注解,如@Target、@Retention等。 - **常用注解**: - **@Component/@Repository/@Service/@Controller**:用于标注组件类。 ...

    spring boot AOP注解方式实现多数据源

    在这个场景下,我们可以在方法上添加自定义注解,比如`@UseDataSource("primary")`或`@UseDataSource("secondary")`,然后在切面中解析这个注解,根据其值来选择数据源。 5. **切换数据源**:在切面的`@Around`通知...

    Spring的Autowired自动装配(XML版本+Annotation版本+源码+解析)

    4. 如果找到多个匹配的bean,可以使用@Primary注解指定首选bean,或者使用@Qualifier注解精确匹配。 5. 最后,执行实际的注入操作,如设置字段值、调用方法或构造器。 了解了@Autowired的工作原理后,我们可以结合...

    spring boot多数据源(AOP注解动态切换)

    本教程将详细讲解如何在Spring Boot项目中集成Druid连接池,并利用AOP注解实现多数据源的动态切换。我们将基于JDK 1.8和Spring Boot 1.5.14版本进行讨论。 首先,我们需要理解Spring Boot的自动配置特性。Spring ...

    spring的annotation的autowired

    在Spring框架中,`@Autowired`注解是一个关键特性,用于自动装配Bean的依赖。它极大地简化了依赖注入的过程,使得开发者无需手动使用`<bean>`标签或`FactoryBean`来配置Bean之间的依赖关系。本篇文章将深入探讨`@...

    Spring @Autowired

    在Java的Spring框架中,`@Autowired`是一个关键的依赖注入(Dependency Injection,简称DI)注解,它允许开发者自动装配Bean的依赖,无需手动设置属性或者调用构造函数。这个注解是Spring框架的核心特性之一,极大地...

    spring加载顺序讨论

    本文将详细探讨Spring加载顺序,并结合`@PostConstruct`、`构造方法`以及`@Autowired`等关键注解进行深入解析。 首先,Spring容器在启动时会读取配置文件(如XML或Java配置类),根据配置信息创建Bean的定义。Bean...

    spring注解识别一个接口的多个实现类方法

    本篇文章将详细解析如何使用Spring注解来识别并选择一个接口的多个实现类方法。 1. **接口定义** 首先,我们需要定义一个接口,例如`Filter`,它定义了一组公共方法供不同的实现类去实现。在本例中,`Filter`只有一...

    Spring学习笔记(6)----编码剖析Spring依赖注入的原理

    当我们使用`@Autowired`注解时,Spring容器会自动寻找匹配类型的bean并注入。这个过程涉及到了Spring的Bean工厂和ApplicationContext。Bean工厂是Spring的核心,负责bean的创建、初始化、配置以及管理。...

    Spring 3.1 API

    Spring 3.1 API是Spring框架的一个重要版本,它带来了许多增强特性和改进,旨在提升开发者在企业级Java应用中的编程体验。这个版本的核心目标是提高性能、简化配置以及增加对Java新特性的支持。 首先,Spring 3.1...

    @Autowired 注解是如何实现的?(csdn)————程序.pdf

    在Spring框架中,`@Autowired`注解是核心的依赖注入(Dependency Injection,DI)工具,它允许开发者自动地将Bean实例注入到需要的地方,无需显式地通过setter方法或构造函数来设置。在Java配置方式下,`@Autowired`...

    spring学习笔记(六)

    - 如果有多个bean符合自动装配的条件,可以使用`@Primary`注解指定一个为主要的bean,当只有一个bean可以被注入时,Spring会优先选择带有`@Primary`的bean。 9. **自动装配与泛型**: - 自动装配也可以应用于泛型...

    Spring5.0中文开发手册

    - **3.9.3 使用@Primary微调基于注解的自动装配** - 在存在多个候选bean时,选择其中一个作为首选。 - **3.9.4 使用@Qualifier限定符微调基于注解的自动装配** - 通过@Qualifier注解指定具体的bean。 - **3.9.5...

    spring-autowire.zip

    此外,我们还可以在构造器中使用@Autowired,这样在实例化Person时,Spring就会自动调用带参数的构造器,并注入对应的bean。对于没有匹配类型的bean,Spring会抛出异常。如果希望在找不到匹配bean时使用null或者...

Global site tag (gtag.js) - Google Analytics