@Autowired 和 @Resource 区别何在?

        @Autowired 和 @Resource 都是用于依赖注入的注解,它们的主要作用是将Spring容器中的bean自动装配到需要依赖的对象中。

        尽管它们看似相似,但仍存在一些区别,分别体现在:
        1.注解来源
        2.自动注入方式
        3.处理默认值
        4.常见用法
        5.兼容性

1.注解来源

        @Autowired :来自于Spring框架,是Spring提供的注解。
        @Resource :来自于JDK中的javax.annotation包,是Java EE规范的一部分。

2.自动注入方式

        (1)@Autowired :默认按类型(byType)进行自动注入;如果容器中有多个相同类型的bean,且没有指定特定的bean名称,可能会引发错误。因此我们可以通过@Qualifier注解来指定具体的bean:

    @Autowired
    @Qualifier("MyBeanName")
    private MyService myService;

        "MyBeanName" "MyService" "myService" 随意命名~
        另外,@Autowired注解还可以应用在构造方法、Setter方法以及字段上。

        (2)@Resource :默认按名称(byName)进行注入。如果找不到与名称匹配的bean,它会回退到按类型(byType)注入。如果名称和类型都匹配不到,会抛出异常:

    @Resource(name = "MyBeanName")
    private MyService myService;

        "MyBeanName" "MyService" "myService" 随意命名~
        另外,@Resource 通常用于字段或Setter方法上,而不应用于构造方法。

3.处理默认值

        (1)@Autowired :在某些情况下,Spring会要求自动注入的依赖是必需的,默认情况下会报错(除非你将required属性设置为false用以表示依赖项是可选的):

    @Autowired(required = false)
    private MyService myService;

        "MyService" "myService" 随意命名~

        (2)@Resource :没有required属性,若找不到匹配的bean,则会抛出异常。

4.常见用法

        @Autowired :通常用于Spring框架中较多,特别是需要按类型自动注入的场景,同时也可以结合注解@Qualifier用于按名称注入。
        @Resource :通常在需要兼容Java EE规范的项目中使用,或者需要明确按名称注入的场景。

(总结:取之用之~)

5.兼容性

        @Autowired :Spring特有,适用于任何Spring应用。
        @Resource :是标准Java EE注解,可以用于任何支持Java EE的容器中(如Spring、EJB等)。

总结

        @Autowired :更倾向于(默认)按类型注入,主要用于Spring的自动注入机制,该注解灵活,适用于多种注入场景,是Spring框架中常用的注入方式。
        @Resource :更倾向于(默认)按名称注入,主要用于需要更明确的控制或在Java EE规范中使用时,适用于需要与Java EE规范兼容的场景,是Java EE标准的一部分。

        选择使用哪个注解主要取决于你的项目需求和个人喜好,如果你主要在Spring框架中工作,希望代码更符合Spring的惯用风格,@Autowired或许会更适合;如果你希望代码更符合Java EE标准或需要更明确的控制,@Resource会是更好的选择~

  • 23
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
@Autowired 和 @Resource 都是 Java 中用于依赖注入的注解,它们的作用都是将依赖对象自动注入到目标对象中,简化了对象之间的关联和依赖管理。它们之间的区别如下: 1. 来源不同: - @AutowiredSpring 框架提供的注解,通过类型进行自动装配。它会根据类型在容器中查找匹配的 bean,并将其注入到目标对象中。 - @ResourceJava EE 标准的注解,通过名称进行自动装配。它会根据名称在容器中查找匹配的 bean,并将其注入到目标对象中。 2. 注入规则不同: - @Autowired 默认按照类型进行注入,如果存在多个类型匹配的 bean,则会抛出异常。可以通过 @Qualifier 注解指定具体的 bean 名称。 - @Resource 默认按照名称进行注入,如果存在多个名称匹配的 bean,则会根据 name 属性指定的名称进行选择。 3. 支持框架不同: - @AutowiredSpring 框架特有的注解,在 Spring 框架中使用较广泛。 - @ResourceJava EE 标准的注解,理论上可以在任何支持 Java EE 标准的容器中使用。 总体来说,@Autowired 是基于类型进行自动装配,而 @Resource 是基于名称进行自动装配。@Autowired 更加灵活,但需要额外的配置来处理多个类型匹配的情况。@Resource 更加符合 Java EE 标准,但在一些特定场景下可能稍显不灵活。在使用时,可以根据具体的需求和使用框架来选择合适的注解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值