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

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

前言

@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注解放在方法上会在类加载后自动注入这个方法的参数,并执行一遍方法。

Spring依赖注入@Autowired@Resource核心机制、实战场景与避坑指南 依赖注入是现代Java企业级应用开发的核心设计模式,它通过将对象依赖关系的创建与管理交由容器负责,实现了控制反转,从而提升代码的松耦合性、可测试性和可维护性。其原理在于容器在运行动态地将依赖对象注入到目标对象中,取代了传统的硬编码创建方式。这一技术的核心价值在于简化了组件间的协作,使得架构更清晰,更易于管理。在Spring框架这一主流技术生态中,依赖注入被广泛应用,而注解驱动的方式因其简洁性成为开发首选。其中,@Autowired@Resource是两个最常用的依赖注入注解,它们虽然目的一致,但背后的机 阅读详情

相关推荐

@Component在类上构造器注入无法注入

Component注解是Spring框架提供的一个注解,用于标识一个类为组件,并让Spring自动进行组件扫描和实例化。在类上使用@Component注解,并不能实现构造器注入。在上述示例中,构造器上的@Autowired注解会告诉Spring框架在实例化MyClass,自动将一个符合类型的MyDependency对象作为参数传入构造器,实现了构造器注入。如果你希望在类中进行构造器注入,可以使用其他注解来实现,例如@Autowired@Inject。

qq_58148854的博客 1598

spring boot问题记录(1):@Component注解无法注入Service

【代码】问题记录(1):@Component注解无法注入Service。

Ljm_的博客 2032

@Resource注解无法使用失败以及java.lang.NoSuchMethodError:javax.annotation.Resource.lookup()的问题

关于@Resource注解无法使用失败问题 这几天在使用Spring框架学习的候,在使用基于注解形式注入属性的@Resource候发现了一些问题,今天来分享一下。 在使用候发现会冒红报错,也无法导入javax.annotation.Resource 经过不断尝试以及上网查阅,发现了几个解决的方法: 1、Resource是javax.annotation包中的一个api,如果无法使用,那么可能是jdk版本太低者太高的问题,这里推荐是jdk1.8 ......

weixin_46990115的博客 1万+

springboot中@Autowired 注入失效的四种原因及解决方法

通常是因为被注入的对象没有被spring扫描到,此需要添加对应的包扫描路径。 2. 需要自动注入的对象不是spring加载,而是new的方式创建 由于对象不是spring创建的,当然spring也就无法根据注解自动注入对应的实例对象。此可以采用代码的方式,从spring容器中获取对象实例。 3. 需要自动注入的对象不是spring加载,而是采用反射的方式创建 这种情况和第二种情况类似,通常在一些框架调用的候,采用的对象创建方式,为了避免对spring的依赖,采用类的反射方式进行创建。 4. 使用spr

m0_67390969的博客 1万+

Java使用@Component使用@Resource@Autowired注入失败问题解决方法

如果希望使用@Autowired@Resource注解注入的依赖可以为null,可以使用@Autowired(required=false)@Resource(required=false),并在代码中进行相应的处理。如果希望使用@Autowired@Resource注解注入的依赖可以为null,可以使用@Autowired(required=false)@Resource(required=false),并在代码中进行相应的处理。@Autowired注解用于在Spring应用程序中进行依赖注入

经历过大厂、小厂风风雨雨的程序佬 2712

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

今天在项目项目在项目中遇到个问题@Component@Resource@Autowired注入失败了 解决方法

Andy的java博客 1600

@Component的@Value @Resource@Autowired注入失败

@Value注入失败,采用给静态变量注入的方法,set方法注入 private static String url; @Value("${http.url}") public void setUrl(String url) { HttpUtil.url = url; } @Resource@Autowired注入失败,也是同样 private static HttpValues httpValues; @Autowired public void setHttpValues(HttpVa

weixin_43082983的博客 1230

关于Java@Component使用中出现@Autowired为NULL的问题

这是因为spring加载它们的顺序不同,在使用@Component注解将bean实例化到spring容器内的候,因为@Autowired是在这个bean之中的,此@Autowired还未完成自动装载,所以导致依赖注入的service为null。在@Component注解的类下,再使用@Resource@Autowired注解。如此操作会导致依赖注入失败。今天在写一个自定义工具类的候发现一个问题,就是@Component使用中出现@Autowired为NULL,

weixin_44831330的博客 1840

@Component注解的类下,再使用@Resource@Autowired注解导致依赖注入失败

这是因为spring加载它们的顺序不同,在使用@Component注解将bean实例化到spring容器内的候,因为@Autowired是在这个bean之中的,此@Autowired还未完成自动装载,所以导致依赖注入的service为null。在@Component注解的类下,再使用@Resource@Autowired注解。如此操作会导致依赖注入失败。把@Autowired注解放在方法上会在类加载后自动注入这个方法的参数,并执行一遍方法。

Types_c的博客 211

@autowired注入失败_Spring依赖注入和自动注入

1、 Spring依赖注入1、 Set 方法注入 ,调用setXxx()方法为属性(依赖)赋值2、 构造器注入,调用构造器,赋值1.1 Set注入男注意: name: 需要赋值的属性名value : 直接赋值 8大基本数据类型(含包装类) 和Stringref: 如果属性是自定义的引用数据类型使用内部bean 配置:男1.2构造器注入1)构造器注入的基本使用X7说明:通过name 属性 区分参数...

weixin_36154762的博客 766

@Autowired无法注入问题?

感觉试了各种办法,检查也没看出来啥,求助大佬!!! 在使用@Autowired注解前需要确保代注入的类确实在ioc容器中。也就是controller,service,repository注 解,component注解。如果无法注入到ioc容器则需要通过componentSan扫描进ioc容器。如果不能解决私信我 照你这种。基本上是注解没加的问题,而且问题基本可以确定是在...

liuji0517的博客 838

@Autowired@Resource的区别、@RequiredArgsConstructor和final

@Autowired@Resource的区别、@RequiredArgsConstructor和final

enthan809882的博客 264

@Autowired 报错的 4 种情况!

点击关注公众号,Java干货及送达‍‍作者 | 王磊来源 | Java中文社群(ID:javacn666)上图的报错信息相信大部分程序员都遇到过,奇怪的是虽然代码报错,但丝毫不影响程序的...

Java技术栈,分享最主流的Java技术 7484

【Day39】Spring 核心注解@Component@Autowired、@Configuration 等

Spring 核心注解@Component@Autowired、@Configuration 等

maihuohuo的博客 870

Spring bean注入注解注入-- @Autowired原理

Spring bean注入注解注入-- @Autowired原理 之前我们已经讲述过bean注入是什么了,也使用了xml的配置文件进行bean注入,这也是Spring的最原始的注入方式(xml注入)。 本节课就讲注解注入。 主要讲解的注解有以下几个: @Autowired、 @Service、@Repository、@Controller 、@Component、@Bean、@Configuration、@Resource 一、@Autowired 概念: @Autowired 注释,它可以对类成员变

5638

@Component组件内使用@Resource注解注入失败使用报错空指针异常

spring加载组件的顺序不同导致,注入@Resource对象spring容器还没有创建这个对象。

1356
上一篇: JavaScript高阶函数介绍
下一篇: Java反射介绍
鳄鱼儿
鳄鱼儿 优质创作者: Java技术领域 优质创作者: Java技术领域 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 273原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鳄鱼儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值