这次看下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;
}
}
分享到:
相关推荐
如果我们不使用@Primary注解,那么在测试类中注入Sheet类型的bean时,Spring容器不知道该加载哪个bean,会出现歧义问题。但是,如果我们在SheetB上添加@Primary注解,那么Spring容器就会优先加载SheetB Bean。 @...
在Spring框架中,自动检测注解(Autowired)是核心特性之一,它极大地简化了依赖注入的过程,使得开发者能够更加专注于业务逻辑,而不是繁琐的配置。本文将深入探讨Spring中的自动检测注解及其工作原理。 首先,`@...
本文将深入探讨Spring注解的基本原理,包括它们如何被解析、处理以及如何影响应用程序的生命周期。 首先,我们需要了解注解在Java语言中的本质。注解是一种元数据,允许程序员在源代码中嵌入信息,这些信息可以被...
Spring中的@Autowired注解可以用于字段、方法或参数级别,表示需要自动装配的依赖。在我们的模拟实现中,我们需要一个注解处理器来扫描带有@Autowired注解的元素,并尝试找到匹配的bean进行装配。这需要实现以下步骤...
#### 三、Spring注解开发详解 ##### 3.1 注解概述 - **元注解**:用于修饰其他注解的注解,如@Target、@Retention等。 - **常用注解**: - **@Component/@Repository/@Service/@Controller**:用于标注组件类。 ...
在这个场景下,我们可以在方法上添加自定义注解,比如`@UseDataSource("primary")`或`@UseDataSource("secondary")`,然后在切面中解析这个注解,根据其值来选择数据源。 5. **切换数据源**:在切面的`@Around`通知...
4. 如果找到多个匹配的bean,可以使用@Primary注解指定首选bean,或者使用@Qualifier注解精确匹配。 5. 最后,执行实际的注入操作,如设置字段值、调用方法或构造器。 了解了@Autowired的工作原理后,我们可以结合...
本教程将详细讲解如何在Spring Boot项目中集成Druid连接池,并利用AOP注解实现多数据源的动态切换。我们将基于JDK 1.8和Spring Boot 1.5.14版本进行讨论。 首先,我们需要理解Spring Boot的自动配置特性。Spring ...
在Spring框架中,`@Autowired`注解是一个关键特性,用于自动装配Bean的依赖。它极大地简化了依赖注入的过程,使得开发者无需手动使用`<bean>`标签或`FactoryBean`来配置Bean之间的依赖关系。本篇文章将深入探讨`@...
在Java的Spring框架中,`@Autowired`是一个关键的依赖注入(Dependency Injection,简称DI)注解,它允许开发者自动装配Bean的依赖,无需手动设置属性或者调用构造函数。这个注解是Spring框架的核心特性之一,极大地...
本文将详细探讨Spring加载顺序,并结合`@PostConstruct`、`构造方法`以及`@Autowired`等关键注解进行深入解析。 首先,Spring容器在启动时会读取配置文件(如XML或Java配置类),根据配置信息创建Bean的定义。Bean...
本篇文章将详细解析如何使用Spring注解来识别并选择一个接口的多个实现类方法。 1. **接口定义** 首先,我们需要定义一个接口,例如`Filter`,它定义了一组公共方法供不同的实现类去实现。在本例中,`Filter`只有一...
当我们使用`@Autowired`注解时,Spring容器会自动寻找匹配类型的bean并注入。这个过程涉及到了Spring的Bean工厂和ApplicationContext。Bean工厂是Spring的核心,负责bean的创建、初始化、配置以及管理。...
Spring 3.1 API是Spring框架的一个重要版本,它带来了许多增强特性和改进,旨在提升开发者在企业级Java应用中的编程体验。这个版本的核心目标是提高性能、简化配置以及增加对Java新特性的支持。 首先,Spring 3.1...
在Spring框架中,`@Autowired`注解是核心的依赖注入(Dependency Injection,DI)工具,它允许开发者自动地将Bean实例注入到需要的地方,无需显式地通过setter方法或构造函数来设置。在Java配置方式下,`@Autowired`...
- 如果有多个bean符合自动装配的条件,可以使用`@Primary`注解指定一个为主要的bean,当只有一个bean可以被注入时,Spring会优先选择带有`@Primary`的bean。 9. **自动装配与泛型**: - 自动装配也可以应用于泛型...
- **3.9.3 使用@Primary微调基于注解的自动装配** - 在存在多个候选bean时,选择其中一个作为首选。 - **3.9.4 使用@Qualifier限定符微调基于注解的自动装配** - 通过@Qualifier注解指定具体的bean。 - **3.9.5...
此外,我们还可以在构造器中使用@Autowired,这样在实例化Person时,Spring就会自动调用带参数的构造器,并注入对应的bean。对于没有匹配类型的bean,Spring会抛出异常。如果希望在找不到匹配bean时使用null或者...