spring 注释

介绍:

当存在多个相同类型的bean时,使用Spring @Primary批注为标记的bean提供更高的优先级。

默认情况下,Spring按类型自动连线。 因此,当Spring尝试自动装配并且有多个相同类型的bean时,我们将得到一个NoUniqueBeanDefinitionException

Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.programmergirl.Person]is defined: expected single matching bean but found 2: student, teacher
...

为了解决这个问题,我们可以选择使用Spring @Primary批注,从而将一个bean标记为主豆。

在本教程中,我们将更详细地探讨此批注的用法。

假设我们有以下配置类:

@Configuration
public class UniversityConfig {@Bean@Primarypublic Person student() {return new Student();}@Beanpublic Person teacher() {return new Teacher();}
}

TeacherStudent Bean都继承自Person ,因此我们将其标记为两个@Bean注释方法的返回类型。

但是,请注意, 我们已使用@Primary批注将Student bean标记为主要bean。 现在,让我们启动我们的应用程序:

AnnotationConfigApplicationContext context =AnnotationConfigApplicationContext(UniversityConfig.class);Person student = context.getBean(Person.class);
System.out.println(student.getClass());

我们将看到Spring尝试自动装配时,一个Student对象得到了优先选择。

使用

假设我们启用了组件扫描:

@Configuration
@ComponentScan(basePackages="com.programmergirl.beans")
public class UniversityConfig {
}

对于这种情况, 我们可以使用@Primary直接注释我们的Spring组件类:

@Primary
@Component
public class Student implements Person {...
}@Component
public class Teacher implements Person {...
}

现在,当直接尝试插入不带@QualifierPerson类型时,将插入Student bean:

@Service
public class StudentService {// Student bean is primary and so it'll get injected@Autowiredprivate Person student;public void printStudentDetails() {System.out.println(student.getClass());...}
}

结论:

在本快速教程中,我们探讨了Spring中@Primary批注的用法。

顾名思义,当有多个相同类型的bean时,可以使用@Primary批注定义一个主对象。

翻译自: https://www.javacodegeeks.com/2019/10/spring-primary-annotation.html

spring 注释

spring 注释_Spring@主要注释相关推荐

  1. spring 注释_Spring @Value注释

    spring 注释 介绍: Spring @Value批注用于将值注入变量和方法参数. 我们可以读取spring环境变量或系统变量. 它还支持SpEL. 在本快速教程中,我们将探讨如何使用Spring ...

  2. spring 注释_Spring核心注释

    spring 注释 介绍: org.springframework.beans.factory.annotation和org.springframework.context.annotation包中存 ...

  3. spring 注释_Spring@懒惰注释

    spring 注释 介绍: 默认情况下, Spring框架在应用程序启动时加载并热切初始化所有bean. 在我们的应用程序中,我们可能有一些非常消耗资源的bean. 我们宁愿根据需要加载此类bean. ...

  4. spring的bean注释_Spring @Bean注释

    spring的bean注释 Spring @Bean Annotation is applied on a method to specify that it returns a bean to be ...

  5. Spring MVC自定义验证注释

    在上一教程中,我展示了如何使用注释来验证表单 . 这对于简单的验证非常有用,但是最终,您需要验证一些现成的注释中没有的自定义规则. 例如,如果您需要根据输入的出生日期来验证用户已超过21岁,或者可能需 ...

  6. java 自定义注释_带有自定义注释的Java注释教程

    java 自定义注释 Java批注提供有关代码的信息,并且它们对其批注的代码没有直接影响. 在本教程中,我们将学习Java注释,如何编写自定义注释 ,注释用法以及如何使用反射来解析注释 . 注释是在J ...

  7. 带有自定义注释的Java注释教程

    Java注释提供有关代码的信息,并且它们对所注释的代码没有直接影响. 在本教程中,我们将学习Java注释,如何编写自定义注释 ,注释用法以及如何使用反射来解析注释 . 注释是在Java 1.5中引入的 ...

  8. java dao层编写及注释_JAVA代码注释规范

    2. 班级: 班级的目的,即班级完成的功能,以及班级的创建时间和作者姓名:当多个人一次编辑或修改同一个班级时, 作者姓名中应出现多个姓名: 3. 接口: 在满足类注释的基础上,接口注释应包含设置接口的 ...

  9. 关于eclipse的注释和反注释的快捷键

    使用eclipse那么久了额,对注释和反注释的快捷键一直很模糊,现在记下来,方便查看. 注释和反注释有两种方式.如对下面这段代码片段(①)进行注释: private String value; pri ...

最新文章

  1. 【Linux】 Samba 服务器安装配置实现与Windows系统的文件共享服务
  2. C#9就这么来了,.NET开发者该做点什么?
  3. 动手学无人驾驶(1):交通标志识别
  4. 数据结构pta选择判断复习
  5. 去除div css背景,jQuery-拖动div CSS背景
  6. canvas 两个圆相交重叠区域颜色填充_「译」Canvas中的环绕规则 -Winding rules in Canvas...
  7. Inflater与findViewById()区别
  8. 【渝粤教育】国家开放大学2018年春季 0092-22T民法 参考试题
  9. 利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
  10. 惠普电脑怎么用access_学习如何使用access帮助系统
  11. matlab符号运算报错,matlab符号运算符
  12. 哈工大硕士生用 Python 实现了 11 种经典数据降维算法,源代码库已开放
  13. 数据库服务器到底是用机械硬盘还是固态硬盘
  14. android谷歌手机刷机教程
  15. python界面教学视频_tkinter 窗口可视化你的 Python程序GUI教学
  16. Idea import导包去掉*
  17. 如何统计二十六个英语字母(简便思想)
  18. ELF文件中的各个节区
  19. 2021高考一摸成绩查询,2021高三一模分数线公布!各分数段可报大学大盘点,真是一目了然!...
  20. 【干货】ArcGIS中消除矢量多边形的重叠区

热门文章

  1. [SNOI2017]遗失的答案 (FWT)
  2. CF1039E-Summer Oenothera Exhibition【LCT,根号分治】
  3. P4201-[NOI2008]设计路线【结论,树形dp】
  4. 2018/7/9-纪中某B组题【jzoj1503,jzoj1158,jzoj1161】
  5. codeforces773 D. Perishable Roads(思维+最短路)
  6. 【并查集】打击犯罪(ssl 2342)
  7. 【BZOJ3218】a+b problem (最小割 + 主席树)
  8. codeforces 935E Fafa and Ancient Mathematics 语法树、动态规划
  9. 14、ORACLE下的基本SQL操作
  10. 初级Java开发与架构之间的差距不仅仅是开发时间