@autowired和@resource注解的区别是什么?

原创
ithorizon 8个月前 (09-01) 阅读数 112 #Java

@Autowired和@Resource注解的区别是什么?

在Spring框架中,@Autowired和@Resource是两种常用于依靠注入的注解。虽然它们都可以用来注入bean,但在使用做法和背后的原理上存在一些差异。本文将探讨这两个注解的区别。

1. @Autowired

@Autowired是Spring框架提供的注解,用于自动装配Spring容器中的bean。它可以在构造方法、字段、方法或配置器(setter)方法上使用。

示例1:使用@Autowired注解在字段上

public class MyClass {

@Autowired

private MyDependency myDependency;

}

示例2:使用@Autowired注解在方法上

public class MyClass {

private MyDependency myDependency;

@Autowired

public void setMyDependency(MyDependency myDependency) {

this.myDependency = myDependency;

}

}

2. @Resource

@Resource是Java EE 5(Java Platform, Enterprise Edition 5)引入的注解,用于依靠注入。它遵循JSR-250规范。与@Autowired不同,@Resource可以使用名称、类型和限定符进行注入。

@Resource可以通过name属性指定要注入的bean名称,也可以通过type属性指定要注入的bean类型。

示例1:使用@Resource注解按名称注入

public class MyClass {

@Resource(name = "myDependencyBean")

private MyDependency myDependency;

}

示例2:使用@Resource注解按类型注入

public class MyClass {

@Resource(type = MyDependency.class)

private MyDependency myDependency;

}

@Autowired与@Resource的区别

(1)来源不同:@Autowired是Spring框架提供的,而@Resource是Java EE 5规范的一部分。

(2)注入做法不同:@Autowired默认按类型进行注入,如果存在多个同类型的bean,则可以通过@Qualifier注解指定名称。而@Resource可以通过name和type属性进行注入。

(3)适用范围不同:@Autowired可以用于构造方法、字段、方法或配置器(setter)方法上,而@Resource只能用于字段和方法的参数上。

(4)灵活性:@Resource提供了更多的灵活性,可以通过name属性精确地指定要注入的bean名称,而@Autowired需要结合@Qualifier使用。

总的来说,@Autowired和@Resource都可以实现依靠注入,但它们在使用做法和原理上有所区别。在实际开发中,可以凭借具体需求和场景选择合适的注解。


本文由IT视界版权所有,禁止未经同意的情况下转发

文章标签: Java


热门