@autowired和@resource注解的区别是什么?
原创@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都可以实现依靠注入,但它们在使用做法和原理上有所区别。在实际开发中,可以凭借具体需求和场景选择合适的注解。