目录

  • 1. `@Autowired` 注解
    • 1.1. `@Autowired` 注解的使用
      • 1.1.1. 类成员变量上(较为常用)
      • 1.1.2. 用在方法上
      • 1.1.3. 用在构造器上
      • 1.1.4. 用在参数上
    • 1.2. `@Autowired` 注解的说明
  • 2. `@Autowired` 配合 `@Qualifier`
  • 3. `@Autowired` 配合 `@Primary`

1. @Autowired 注解

1.1. @Autowired 注解的使用

@Autowired 注解,可以对类成员变量、方法和构造函数进行标注,完成自动装配的工作

1.1.1. 类成员变量上(较为常用)

@Controller
public class SoakController {@Autowiredprivate SoakService soakService;
}

1.1.2. 用在方法上

@Controller
public class SoakController {private SoakService soakService;@Autowired public void setSoakService(SoakService soakService) {this.soakService = soakService;}
}

1.1.3. 用在构造器上

@Controller
public class SoakController {private SoakService soakService;@Autowired public SoakController(SoakService soakService) {this.soakService = soakService;}
}

1.1.4. 用在参数上

@Controller
public class SoakController extends BaseController {private SoakService soakService;public SoakController(@Autowired SoakService soakService) {this.soakService = soakService;}
}

1.2. @Autowired 注解的说明

  • 默认优先按照 byType 去容器中找对应的组件,找到就赋值
  • 如果找到多个相同类型的组件,再通过 byName 来到 IOC 容器中进行查找
  • 默认情况下,它具有强制契约特性,其所标注的属性必须是可装配的。如果没有 bean 可以装配到 @Autowired 所标注的属性或参数中,那么你会看到 org.springframework.beans.factory.NoSuchBeanDefinitionException 的异常信息

2. @Autowired 配合 @Qualifier

  • @Autowired 是默认根据 byType 进行自动装配的,如果需要按 byName 进行装配,则需要配合 @Qualifier 注解使用
  • 如果容器中存在多个相同类型的组件,此时需要通过 byName 来进行装配,则需要配合 @Qualifier 注解使用

组件 1

@Service
public class BookService {// 类型为 BookService,name 为 bookService}

组件 2

@Configuration
public class MainConfigOfAutowired {// 类型为 BookService,name 为 bookService01@Beanpublic BookService bookService01() {return new BookService();}
}

测试

@Autowired
@Qualifier("bookService01")
private BookService bookService;@Test
public void MyTest() {System.out.println(bookService);
}

由于容器中存在 bookService01bookService 两个类型相同的组件 bean,那么此时可以使用 @Qualifier(“bookService01”) 明确指定 beanname 后,@Autowired 不再根据 byType 自动装配了,而用 bookService01 作为组件的 name 去容器中查找,找到组件 2,装配成功

3. @Autowired 配合 @Primary

  • Spring 在进行自动装配的时候,会 优先 使用用 @Primary 标注指定的 bean
  • 如果容器中有多个组件 Type 类型相同,注入的 beanName 名称也相同,那么此时就可以使用 @Primary 注解,将某一个组件 优先 注入
  • 不能把多个 bean 都标注为 @Primary,不然你会得到 NoUniqueBeanDefinitionException 这个异常

组件 1

@Service
public class BookService { // 类型为 BookService,name 为 bookService}

组件 2

@Configuration
public class MainConfigOfAutowired {// 类型为 BookService,name 为 bookService01@Primary@Beanpublic BookService bookService01() {return new BookService();}
}

测试 1

@Autowired
private BookService bookService;@Test
public void MyTest() {System.out.println(bookService);
}

因为组件 2 使用了 @Primary 注解标注,所以 @Autowired 会优先使用 namebookService01 进行装配

测试 2

@Qualifier("bookService")
@Autowired
private BookService bookService;@Test
public void MyTest() {System.out.println(bookService);
}

虽然组件 2 使用了 @Primary 注解标注,但是 @Qualifier@Primary 的优先级要高,所以使用注解 @Qualifier 标注指定后, @Primary 就不起作用了,所以还是直接用指定的 bookService 作为组件的 name 去容器中装配

Spring中的@Autowired,@Qualifier和@Primary注解相关推荐

  1. 关于Spring中的context:annotation-config/配置(开启注解)

    转自:https://www.cnblogs.com/doudouxiaoye/p/5681518.html 当我们需要使用BeanPostProcessor时,直接在Spring配置文件中定义这些B ...

  2. Spring中的scope配置和@scope注解

    Scope,也称作用域,在 Spring IoC 容器是指其创建的 Bean 对象相对于其他 Bean 对象的请求可见范围.在 Spring IoC 容器中具有以下几种作用域:基本作用域(single ...

  3. @autowired注解_品Spring:对@Autowired和@Value注解的处理方法(文末附spring系列资源合集)...

    作者:编程新说李新杰 出自:微信公众号"编程新说" 原文:品Spring:对@Autowired和@Value注解的处理方法 在Spring中能够完成依赖注入的注解有JavaSE提 ...

  4. spring中<tx:annotation-driven>标签转为注解@EnableTransactionManagement

    spring中涉及事务的内容使用注解开发时,需开启事务的注解驱动 <?xml version="1.0" encoding="UTF-8"?> &l ...

  5. Sprint Boot————@Qualifier、@Primary

    引言 使用@Autowired自动注入时: 如果注入的接口有多个实现类,如下所示: 那么如果不指定具体是哪个实现类的Bean,在Spring Boot启动时就会发生异常(下图请点击查看): 异常的描述 ...

  6. Spring高手之路2——深入理解注解驱动配置与XML配置的融合与区别

    文章目录 1. 配置类的编写与Bean的注册 2. 注解驱动IOC的依赖注入与XML依赖注入对比 3. Spring中组件的概念 4. 组件注册 5. 组件扫描 5.1 使用@ComponentSca ...

  7. spring中使用Aspectj进行切面编程

    推荐 个网购 优惠券 领取网站 U券网 uquanfree.com 点击链接进入 Spring的AOP可以通过对@AspectJ注解的支持和在XML中配置来实现,本文通过实例简述如何在Spring中使 ...

  8. 【Spring注解驱动开发】使用@Autowired@Qualifier@Primary三大注解自动装配组件,你会了吗?

    写在前面 [Spring专题]停更一个多月,期间在更新其他专题的内容,不少小伙伴纷纷留言说:冰河,你[Spring专题]是不是停更了啊!其实并没有停更,只是中途有很多小伙伴留言说急需学习一些知识技能, ...

  9. Spring中@Primary注解

    1.概述 讨论Spring的@Primary注解,该注解是框架在3.0版中引入的. 其作用与功能,当有多个相同类型的bean时,使用@Primary来赋予bean更高的优先级. 2.为什么需要@Pri ...

  10. Spring 注解 @Qualifier和@Primary 详细解析

    1. 概述 今天带你了解一下 Spring 框架中的 @Qualifier 注解,它解决了哪些问题,以及如何使用它.我们还将了解它与 @Primary 注解的不同之处. 2. 痛点 使用 @Autow ...

最新文章

  1. pup 流程控制语句(下)
  2. 重新定义智能平板电脑 第四范式与联想达成战略合作
  3. OpenCASCADE:拓扑 API之3D模型Defeaturing
  4. django.core.exceptions.ImproperlyConfiguredmysqlclient 1.3.13 ornewer is required you have 0.9.2(亲测)
  5. 这届产品经理也太太太太难了吧!
  6. pythonwx功能_python中wx模块的具体使用方法
  7. static 静态局部变量
  8. java stream collect_java流stream中的collect()方法详解
  9. linux主机慢的原因,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  10. 关于防止表单form重复提交的方式
  11. linux 基础——常见命令及问题
  12. 网络工程师的机会在哪里
  13. Python部署虚拟环境的利器——Virtualenv
  14. mac安装mysql出错_Mac 安装MySQL过程遇到的问题
  15. Type-C PD充电简介
  16. ssl证书过期怎么解决?
  17. Ubuntu 20.04系统中Sage(sagemath)安装及使用详细过程
  18. java抠图人物背景图片_如何进行人物抠图?让你快速完成复杂背景人像的在线抠图...
  19. 用户名+密码控制+php文件存储
  20. k8s创建用户账号——User Account

热门文章

  1. 经典CNN之:VGGNet
  2. 使用 ssh-keygen访问服务器
  3. 算法:罗马数字转换为整数13. Roman to Integer
  4. React Native之原理浅析, iOS原理分析与实践解析、Android原理分析与实践解析
  5. 查看iOS App的bundleId
  6. android iptables清空,android中的iptables错误:iptables-save和iptables-restore无法正常工作...
  7. 字符流中第一个只出现一次的字符
  8. 实现atoi函数(C++实现)
  9. matplotlib绘制横向柱状图
  10. 【生信进阶练习1000days】day14-GenomicDataCommons(GDC)