Spring中@Autowired和@Qualifier注解的3个知识点小结

目录
  • @Autowired和@Qualifier注解的3个知识点
    • 1.@Autowired自动注入
    • 2.如果想直接使用byName的注入方式
    • 3.如果没有指定Spring创建的bean的名称
  • @Autowired @Qualifier @Resource的区别
    • 1.@Autowired
    • 2.@Qualifier
    • 3.@Resource

@Autowired和@Qualifier注解的3个知识点

1.@Autowired自动注入

默认是先以byType的方式,如果有多个类型相匹配,那么使用byName进行注入

2.如果想直接使用byName的注入方式

那么需要在@Autowired注解的下面加上注解@Qualifier(“userService”),括号里面为要注入的bean的name,如图

3.如果没有指定Spring创建的bean的名称

(1) 默认名为类名,但首字母小写,如:UserService类,创建的bean的name为userService

(2) 如果类名前两个或以上字母都为大写,那么bean的名字就是类名,如:TUserService类,默认创建的bean的name为TUserService

@Autowired @Qualifier @Resource的区别

@Autowired

  • spring的注解,默认按type注入

@Qualifier

  • spring的注解,按名字注入 一般当出现两个及以上bean时,不知道要注入哪个,作为@Autowired()的修饰用

@Resource

  • @Resource(这个注解属于J2EE的),默认按name注入,可以通过name和type属性进行选择性注入

看下栗子

1.@Autowired

写一个User类 实例化一个User的Bean 在controller中使用@Autowired注入 运行程序

访问接口


要注意的是@Autowired默认情况下required=true当注入对象未实例化被使用 会空指针 如果要允许null 值,可以设置它的required属性为false,@Autowired(required=false)

2.@Qualifier

在实例化Bean的时候 实例化两个 如图

这时候会发现注入的地方报错 不清楚要注入哪个bean 错误如下图

这时候我们就可以使用@Qualifier来配合@Autowire进行注入了

首先在实例化bean的时候指定名字 注入时使用对应的名字注入 如下图


重新启动后正常访问

3.@Resource

默认安照名称进行装配,名称可以通过name属性进行指定, 如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。

当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

通过name属性指定注入 启动项目后可正常访问

不指定name 初始化一个bean,name=user2,


他首先按照类名小写user作为name去注入Bean,发现并没有这个名字的实例,然后会根据类型自动匹配 所以运行程序不会出错 可以正常访问

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Spring注解@Qualifier的详细用法你知道几种

    环境:springboot2.3.10 一般使用在项目中使用@Qualifier来限定注入的Bean. 由于项目中我习惯用@Resource注解,所以这里先对@Autowired和@Resource进行个简单的说明. @Autowired和@Resource区别 相同点: @Autowired与@Resource都可以用来装配Bean.都可以写在字段上,或写在setter方法上. 区别: 1.@Autowired(Spring注解) 默认按类型装配,默认情况下必须要求依赖对象必须存在(不存在会报

  • 基于Spring的注解@Qualifier小结

    目录 Spring的注解@Qualifier小结 先说明下场景,代码如下 @qualifier注解 参见下面的例子 Spring的注解@Qualifier小结 近期在捯饬spring的注解,现将遇到的问题记录下来,以供遇到同样问题的童鞋解决~ 先说明下场景,代码如下 有如下接口: public interface EmployeeService { public EmployeeDto getEmployeeById(Long id); } 同时有下述两个实现类 EmployeeServiceI

  • Spring实战之Qualifier注解用法示例

    本文实例讲述了Spring实战之Qualifier注解用法.分享给大家供大家参考,具体如下: 一 配置 <?xml version="1.0" encoding="GBK"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmln

  • Spring注解@Resource和@Autowired区别对比详解

    前言 @Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入. 1.共同点 两者都可以写在字段和setter方法上.两者如果都写在字段上,那么就不需要再写setter方法. 2.不同点 (1)@Autowired @Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory

  • Spring中@Autowired和@Qualifier注解的3个知识点小结

    目录 @Autowired和@Qualifier注解的3个知识点 1.@Autowired自动注入 2.如果想直接使用byName的注入方式 3.如果没有指定Spring创建的bean的名称 @Autowired @Qualifier @Resource的区别 1.@Autowired 2.@Qualifier 3.@Resource @Autowired和@Qualifier注解的3个知识点 1.@Autowired自动注入 默认是先以byType的方式,如果有多个类型相匹配,那么使用byNa

  • spring中@autowired、@Qualifier、@Primary注解的使用说明

    目录 @autowired.@Qualifier.@Primary注解的使用 一:当前属性不是必须的时 二:容器中存在多个同种类型的组建 @Autowired @Resource @Qualifier @Primary的区别 @autowired.@Qualifier.@Primary注解的使用 学过spring的朋友应该都知道@Autowired注解,将IOC容器中的属性注入到当前属性中. 一:当前属性不是必须的时 @Autowired注解有且只有这一个属性 @Autowired(requir

  • Spring框架中 @Autowired 和 @Resource 注解的区别

    Spring框架中 @Autowired 和 @Resource 注解的区别 在 spring 框架中,除了使用其特有的注解外,使用基于 JSR-250 的注解,它包括 @PostConstruct, @PreDestroy 和 @Resource 注释. 首先,咱们简单了解 @PostConstruct 和 @PreDestroy 注释: 为了定义一个 bean 的安装和卸载,我们可以使用 init-method 和 destroy-method 参数简单的声明一下 ,其中 init-meth

  • Spring中@Autowired与@Resource的区别详析

    目录 一.定义 二.区别 总结 一.定义 @Autowired 对类成员变量.方法及构造函数进行标注,完成自动装配的工作. @Resource 在语义上被定义为通过其唯一的名称来标识特定的目标组件,其中声明的类型与匹配过程无关. 如果没有明确指定名称,则默认名称是从字段名称或设置方法(get.set方法)派生的. 如果用在字段上,则采用字段名称; 如果用在在setter方法,它采用其属性名称(例如setProperty()方法,取property做为属性名称). 二.区别 在Spring框架中,

  • Spring 中 @Service 和 @Resource 注解的区别

    Spring 中 @Service 和 @Resource 注解的区别 1 前言 在咱们使用 spring 框架的时候,注解是"不可或缺"的一部分,她帮我们脱离了配置繁琐的 XML 文件的工作,但有一点却需要我们自己去把握,那就是"3何",即"何时何地用何注解?"在本篇博文中,作者就简单介绍一下如何恰当的使用 @Service 和 @Resource 这两个注解. 2 注解 2.1 @Service 当咱们需要定义某个类为一个 bean 的时候,

  • 一文搞懂Spring中@Autowired和@Resource的区别

    目录 1.来源不同 2.依赖查找顺序不同 2.1 @Autowired 查找顺序 2.2 @Resource 查找顺序 2.3 查找顺序小结 3.支持的参数不同 4.依赖注入的支持不同 5.编译器提示不同 总结 @Autowired 和 @Resource 都是 Spring/Spring Boot 项目中,用来进行依赖注入的注解.它们都提供了将依赖对象注入到当前对象的功能,但二者却有众多不同,并且这也是常见的面试题之一,所以我们今天就来盘它. @Autowired 和 @Resource 的区

  • 详解Spring中@Valid和@Validated注解用法

    目录 案例引入 @Valid 详解 @Validated 详解 @Valid 和 @Validated 比较 案例引入 下面我们以新增一个员工为功能切入点,以常规写法为背景,慢慢烘托出 @Valid 和 @Validated 注解用法详解. 那么,首先,我们会有一个员工对象 Employee,如下 : /** * 员工对象 * * @author sunnyzyq * @since 2019/12/13 */ public class Employee { /** 姓名 */ public St

  • Spring中如何使用@Value注解实现给Bean属性赋值

    目录 属性赋值 @Value注解的定义: 测试 1.在添加了Spring依赖的Maven项目中创建 2.在resources目录下创建一个配置文件person.properties 3.创建配置类 4.创建测试类进行测试 5.测试结果: 如何给Bean的属性赋值(注入) 1.通过构造方法设置值. 2.设置注入(通过set方法) 属性赋值 只用Spring注解开发的时候,可以使用@Value搭配@PropertySource注解进行给Bean的属性进行赋值. @Value @Value注解的定义:

  • Spring中@Configuration注解修改的类生成代理原因解析

    目录 前言 说明 场景 处理分析 总结 前言 在Spring中只要被@Configuration注解修饰的类,Spring就会为其生成代理对象,至于这样做的主要原因就是为了解决生成对象的单例问题. 说明 实际上作者在ConfigurationClassEnhancer这个类也有注解说明 场景 如果Spring不做处理,下面输出的一定的是false,但是实际上输出的结果是true,那么只有可能是代理类做了特殊处理. @Configuration public class MyConfigurati

  • Spring中的AutowireCandidateResolver的具体使用详解

    接口定义 用于推断一个特定的beanDefinition是否能作为指定依赖的候选者的策略接口 public interface AutowireCandidateResolver { // 默认情况下直接根据bd中的定义返回,如果没有进行特殊配置的话为true default boolean isAutowireCandidate(BeanDefinitionHolder bdHolder, DependencyDescriptor descriptor) { return bdHolder.g

随机推荐