1.来源不同:
@Autowired 是 Spring 框架自带的注解,属于 Spring 的一部分。它主要用于实现自动装配,即根据类型自动注入对应的 Bean。
import org.springframework.beans.factory.annotation.Autowired;
@Resource 是 JSR-250 规范中定义的注解,是 Java EE 的一部分,它提供了一种按名称注入对象的方式。注意@Resource并不是string的
import javax.annotation.Resource;
2.注入方式不同:
@Autowired 的自动注入是根据类型(by Type)进行的,如果有多个相同类型的 Bean,可以通过 @Qualifier 指定具体的 Bean。
@Component
public class Example {
@Autowired
@Qualifier("beanA")
private BeanInterface bean;
}
@Resource 的默认注入方式是按照名称(by Name)进行的,它可以指定 Bean 的名称或者使用默认的 Bean 名称,即和成员变量名相同的 Bean 名称。
@Component
public class Example {
@Resource(name="beanA")
private BeanInterface bean;
}
3.兼容性不同:
@Autowired 支持更多的特性,例如支持 @Qualifier 注解指定具体的 Bean。
@Component
public class Example {
@Autowired
@Qualifier("beanA")
private BeanInterface bean;
}
@Resource 不支持 @Qualifier,但是支持 name 属性指定 Bean 的名称。
@Component
public class Example {
@Resource(name="beanA")
private BeanInterface bean;
}
4.使用场景不同:
@Autowired 主要用于 Spring 应用程序的依赖注入,它是 Spring 框架自带的一种依赖注入方式。
@Resource 不依赖于 Spring 框架,它属于 Java EE 的一部分,主要用于 Java EE 应用程序,但也可以在 Spring 应用程序中使用。
选择使用哪种注解应该根据具体的情况来决定。如果是 Spring 应用程序,优先考虑使用 @Autowired;如果是 Java EE 应用程序或者需要兼容多种框架,则可以使用 @Resource。