【Spring实战】28 @Autowired 和 @Resource注解的区别与使用

这篇具有很好参考价值的文章主要介绍了【Spring实战】28 @Autowired 和 @Resource注解的区别与使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spring 框架是一个强大的 Java 企业应用开发框架,提供了多种依赖注入的方式。其中,@Autowired@Resource 是两个常用的注解,用于实现依赖注入。本文将介绍这两个注解的区别以及在实际应用中如何进行选择。

1. 区别

1)匹配方式

  • @Autowired 是由 Spring 框架提供的注解,用于实现自动装配。它是根据类型进行匹配的,可以用在构造方法、Setter 方法、字段上,甚至可以用在方法参数上。

    @Autowired
    private DemoService DemoService;
    
  • @Resource 是 Java EE 提供的注解,Spring 框架也对其提供支持。它是根据名称进行匹配的,可以用在字段、Setter 方法上,也可以用在方法参数上。

    @Resource(name = "demoService")
    private DemoService DemoService;
    

2)属性名称

  • @Autowired 没提供明确的属性名称指定,它是根据类型进行匹配的,没有类似于 name 属性的指定方式

3)处理方式

  • @Autowired 按照类型匹配进行注入,如果有多个类型匹配,Spring 会选择最匹配的 bean 进行注入。如果没有匹配的bean,会抛出异常

  • @Resource 按照名称匹配进行注入,首先按照指定的名称查找 bean,如果没有找到,则按照类型查找

4)支持类型

  • @Autowired 是 Spring 提供的注解,更加特定于 Spring 框架

  • @Resource 是 Java EE 提供的注解,因此在不使用 Spring 框架时也可以使用

    但是,在 Spring 中更推荐使用 @Autowired

2. 如何选择

在选择使用 @Autowired 还是 @Resource 时,可以根据具体情况考虑以下几点:

  • 项目框架选择:

    如果是纯 Spring 项目,建议使用 @Autowired,因为它更加灵活,是 Spring 框架本身提供的特性。如果需要与非 Spring 框架的组件进行整合,或者在非 Spring 项目中使用,可以考虑使用 @Resource

  • 依赖注入方式:

    如果注重类型匹配,而不关心名称,使用 @Autowired。如果需要根据名称进行匹配,使用 @Resource

  • 项目约定:

    在团队中建议使用一致的注解,以便统一代码风格。可以根据项目的实际情况,选择一种注解作为主要的依赖注入方式

3. 代码示例

使用@Autowired注解的示例:

DemoService.java

package com.cheney.demo.service;

import org.springframework.stereotype.Service;

@Service
public class DemoService {

    public void syaHello(){
        System.out.println("Hello");
    }
}

DemoController.java

package com.cheney.demo.controller;

import com.cheney.demo.service.DemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {

    @Autowired
    private DemoService demoService;

    public void hello() {
        demoService.syaHello();
    }
}

使用@Resource注解的示例:

DemoService.java

package com.cheney.demo.service;

import org.springframework.stereotype.Service;

@Service
public class DemoService {

    public void syaHello(){
        System.out.println("Hello");
    }
}

DemoController.java

package com.cheney.demo.controller;

import com.cheney.demo.service.DemoService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {

    @Resource(name = "demoService")
    private DemoService demoService;

    public void hello() {
        demoService.syaHello();
    }
}

在以上示例中,DemoService 是一个服务类,DemoController 是一个控制器类。通过 @Autowired@Resource 注解,实现了 DemoService 的依赖注入。选择使用哪种注解取决于项目的具体需求和约定。文章来源地址https://www.toymoban.com/news/detail-809869.html

到了这里,关于【Spring实战】28 @Autowired 和 @Resource注解的区别与使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • autowired和resource注解的区别

    注入规则不同 Autowired注解是spring的注解,此注解只根据type进行注入,不会去匹配name.但是如果只根据type无法辨别注入对象时,就需要配合使用@Qualifier注解或者@Primary注解使用。 Resource注解有两个重要的属性,分别是name和type,如果name属性有值,则使用byName的自动注入策略,将值

    2024年02月10日
    浏览(41)
  • Spring中@Resource和@Autowire注解的区别

    @Resource和@Autowired都是用来进行依赖注入的注解,但是它们有一些不同之处。 @Autowired是Spring框架中的注解,它可以用来标注字段、构造函数、方法等,表示需要自动装配。它可以用来注入依赖的bean。如果有多个bean符合条件,可能会抛出异常。 @Resource是Java自带的注解,它可以

    2023年04月25日
    浏览(25)
  • 了解Spring中的依赖注入:@Autowired vs. @Resource

    在Spring框架中,依赖注入是一项关键的特性,通过它,我们能够更灵活、更方便地管理和使用各种组件。在依赖注入的实现中, @Resource 和 @Autowired 是两个常用的注解,它们分别具有不同的特点和用途。在本篇博客中,我们将深入探讨这两个注解的功能、优缺点,并提供一些

    2024年02月02日
    浏览(47)
  • 为什么Spring和IDEA不推荐使用@Autowired注解,有哪些替代方案?

    在使用Spring框架和JetBrains IDEA集成开发环境(IDE)进行Java开发时,你可能经常会遇到@Autowired注解。@Autowired是Spring框架中用于实现依赖注入的核心注解之一。然而,近年来,Spring和IDEA都不再推荐使用@Autowired注解,并提出了更好的替代方案。本文将详细分析为什么Spring和IDEA不

    2024年02月07日
    浏览(51)
  • Spring @Autowired 注解原理

    被扫描的组件配置类 输出结果 定位@Autowired所在包 org.springframework.beans.factory.annotation.Autowired 找到同包下 AutowiredAnnotationBeanPostProcessor AutowiredAnnotationBeanPostProcessor 的类继承图如下 AutowiredAnnotationBeanPostProcessor实现了InstantiationAwareBeanPostProcessor与 MergedBeanDefinitionPostProcessor两个Bea

    2024年02月16日
    浏览(35)
  • 【注解使用】使用@Autowired后提示:Field injection is not recommended(Spring团队不推荐使用Field注入)

    在使用 IDEA 开发 SpringBoot 项目时,在  Controller  类中使用注解  @Autowired  注入一个依赖出现了警告提示,查看其他使用该注解的地方同样出现了警告提示。这是怎么回事?由于先去使用了SpringBoot并没有对Spring进行系统性学习,所以做一个记录。 Field injection is not recommended(

    2024年02月12日
    浏览(33)
  • Spring FrameWork从入门到NB -基于注解配置 & @Autowired注解

    基于注解的配置 其实前面我们已经在基于注解配置了,这是由于个人比较喜欢基于注解配置。 Spring官方文档提过一个问题:基于注解配置要好于基于xml的配置吗?其实各有千秋,根据个人喜好吧。重要的是Spring可以支持基于注解配置,也可以支持基于xml配置文件配置,也可

    2024年02月10日
    浏览(45)
  • 深入解析 Spring Framework 中 @Autowired 注解的实现原理

    关于@Autowired注解的作用 @Autowired 注解在Spring中的作用是实现依赖注入(Dependency Injection),它用于自动装配(autowiring)Spring Bean 的依赖关系。具体来说, @Autowired 注解有以下作用: 自动装配依赖 :通过在类的字段、构造函数、方法参数等地方使用 @Autowired 注解,Spring 容器会

    2024年02月08日
    浏览(34)
  • @Resource和@Autowired的区别

    @Resource和@Autowired这两个注解的作用都是在Spring生态里面去实现Bean的依赖注入 首先,@Autowired是Spring里面提供的一个注解,默认是根据类型来实现Bean的依赖注入。 @Autowired注解里面有一个required属性默认值是true,表示强制要求bean实例的注入,在应用启动的时候,如果IOC容器里

    2024年02月08日
    浏览(36)
  • Spring和IDEA都不推荐用的@Autowired注解,为什么还有那么多人用?

    @Autowired的默认装配 我们都知道在spring中@Autowired注解,是用来自动装配对象的。通常,我们在项目中是这样用的: 没错,这样是能够装配成功的,因为默认情况下spring是按照类型装配的,也就是我们所说的byType方式。 此外,@Autowired注解的required参数默认是true,表示开启自动

    2023年04月18日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包