使用@Component时再使用@Resource或@Autowired时注入失败问题

这篇具有很好参考价值的文章主要介绍了使用@Component时再使用@Resource或@Autowired时注入失败问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

@Component注解的类下,再使用了@Resource@Autowired注解。如此操作会导致依赖注入失败。

这是因为spring加载它们的顺序不同,在使用@Component注解将bean实例化到spring容器内的时候,因为@Autowired是在这个bean之中的,此时@Autowired还未完成自动装载,所以导致依赖注入的service为null

@Component和@Autowired或@Resource

在Spring应用程序中,@Component注解用于将类标记为可自动扫描的组件。当Spring容器启动时,会扫描带有@Component注解的类,并将它们实例化为bean。这些bean会被添加到Spring容器的bean工厂中,以便在应用程序中使用。

@Autowired注解用于在Spring应用程序中进行依赖注入。当Spring容器创建带有@Autowired注解的bean时,会自动查找匹配的类型进行注入。如果找到多个匹配的类型,则会抛出异常。

@Resource注解也可以用于在Spring应用程序中进行依赖注入。当Spring容器创建带有@Resource注解的bean时,会优先使用名称匹配进行注入。如果找不到匹配的名称,则会使用类型匹配进行注入。

因此,在Spring应用程序中,@Component注解的类会在@Autowired@Resource注解的类之前被加载。@Autowired注解会优先使用类型匹配进行依赖注入,而@Resource注解则会优先使用名称匹配进行依赖注入。

在使用@Component@Autowired@Resource注解进行依赖注入时,还需要注意以下几点:

  1. 如果希望使用@Autowired注解注入多个匹配的类型,可以使用@Qualifier注解指定具体的bean名称。
  2. 如果希望使用@Autowired@Resource注解注入非必需的依赖,可以使用@Autowired(required=false)@Resource(required=false)
  3. 如果希望使用@Autowired@Resource注解注入的依赖不存在,可以使用@Autowired(required=false)@Resource(required=false),并在代码中进行相应的处理。
  4. 如果希望使用@Autowired@Resource注解注入的依赖可以为null,可以使用@Autowired(required=false)@Resource(required=false),并在代码中进行相应的处理。
  5. 如果希望使用@Autowired@Resource注解注入的依赖可以为null,可以使用@Autowired(required=false)@Resource(required=false),并在代码中进行相应的处理。

解决方法

@Component
public class Test  {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

//    @Autowired
//    private UserServer userServer;

    private static UserServer userServer;

    @Autowired
    public void setUserServer(UserServer userServer) {
        Test.userServer = userServer;
    }    
}


@Autowired注解放在方法上会在类加载后自动注入这个方法的参数,并执行一遍方法。文章来源地址https://www.toymoban.com/news/detail-456523.html

到了这里,关于使用@Component时再使用@Resource或@Autowired时注入失败问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Spring Boot——@Autowired属性注入问题

    当我们在使用 @Autowired 属性注入时,会发现idea提示 Field injection is not recommended ,译为: 不推荐使用属性注入   要想了解Spring和idea之所以不推荐使用@Autowired属性注入,首先就要先了解Spring常用的注入方式:简单类型注入、集合类型注入, 域属性自动注入, 自动注入的类别, 空值注

    2024年02月06日
    浏览(36)
  • 使用 @Autowired 依赖注入时警告不建议使用字段注入

    在 Spring 中注入依赖时有 字段注入 、 构造器注入 、S etter 方法注入 三种注入方式。 无法注入 final 字段 在 Spring 2.5 中引入了 @Autowired 注解,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。在成员变量上使用 @Autowired 注解可以进行字段注入,如下:

    2024年02月05日
    浏览(31)
  • 解决Spring Boot单元测试中@Autowired依赖注入失效的问题

    本文介绍了在Spring Boot单元测试中使用@Autowired注入的方法中,由于使用反射导致依赖注入失效的问题,以及如何使用AutowiredAnnotationBeanPostProcessor手动处理依赖注入来解决这个问题。 在Spring Boot的单元测试中,我们经常使用@Autowired注解来自动注入需要测试的对象或依赖。然而,

    2024年02月03日
    浏览(41)
  • 记--springboot-工具类中使用@Component、@Resource与@Value失效

    写一个工具类 需要使用@Resource注入RedisTemplate 使用@Value获取application.properties配置文件中配置 并使用@Component将该工具类交个spring管理 调试的时候RedisTemplate以及所有的变量全是是null 看了网上的各种解决方式五花八门 有的说出现问题的原因:@Component这个注解把该类注入到spr

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

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

    2024年02月08日
    浏览(31)
  • autowired和resource注解的区别

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

    2024年02月10日
    浏览(36)
  • @Autowired 和 @Resource 的区别是什么?

    Java面试题目录 @Autowired 和 @Resource 的区别是什么? @Autowired 是 Spring 提供的注解。默认的注入方式为byType(根据类型进行匹配)。 @Resource 是 JDK 提供的注解。默认注入方式为 byName(根据名称进行匹配)。 当一个接口存在多个实现类的情况下,@Autowired 和@Resource都需要通过名称

    2024年01月19日
    浏览(34)
  • 简述@Autowired和@Resource的区别(通俗易懂)

    前言:在日常的开发项目当中,这两个注解是经常会用到的,但是在实际使用当中好像使用起来并没有多大区别,这里我就对这两个注解进行一个详细的区别总结,通过一个完整的典型例子进行论证,思路清晰明了。 目录 一、结论 二、典型案例 2.1、准备代码 2.2、使用@A

    2024年02月03日
    浏览(39)
  • SpringBoot使用@Autowired将实现类注入到List或者Map集合中

    最近看到 RuoYi-Vue-Plus 翻译功能 Translation 的翻译模块配置类 TranslationConfig ,其中有一个注入 TranslationInterface 翻译接口实现类的写法让我感到很新颖,但这种写法在Spring 3.0版本以后就已经支持注入 List 和 Map ,平时都没有注意到这一块,故此记录一下这种写法。 之前一般定义

    2024年02月14日
    浏览(29)
  • 每日一面系列-spring中@Autowired 和 @Resource 区别?

    @Autowired注解是由Spring提供的 ,它可以用来对构造方法、成员变量及方法参数进行标注,它能够根据对象类型完成自动注入,代码如下。 再来看@Resource注解,代码如下。 public class Service { @Resource(name = \\\"service1\\\") private Service service1; @Resource(name = \\\"service2\\\") private Service service2; @Reo

    2024年02月12日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包