@Autowired
和 @Resource
是在Spring框架中用于进行依赖注入的两个常用注解,它们有一些区别和适用场景。
1. @Autowired
:
-
注入方式:
@Autowired
注解可以用在字段、构造方法、Setter方法上,用于实现自动装配。Spring会根据类型(by type)进行自动匹配。 -
按照类型注入: 当有多个类型匹配时,Spring会根据类型选择合适的bean进行注入。如果存在多个相同类型的bean,可以使用
@Qualifier
注解指定要注入的bean的名称
@Autowired
private SomeBean someBean;
2. @Resource
:
-
注入方式:
@Resource
注解可以用在字段、构造方法、Setter方法上,也可以用在方法上。它默认按照名称(by name)进行自动装配,但也支持按照类型进行匹配。 -
按照名称注入: 如果指定了
name
属性,则按照指定的名称进行匹配。如果没有指定name
属性,则默认按照字段名或方法名进行匹配。
@Resource(name = "someBean")
private SomeBean someBean;
区别总结:
-
注入方式:
@Autowired
默认按照类型注入,支持字段、构造方法、Setter方法。@Resource
默认按照名称注入,支持字段、构造方法、Setter方法、方法。
-
匹配方式:
@Autowired
根据类型进行匹配,当有多个类型匹配时,可以使用@Qualifier
进行进一步指定。@Resource
默认按照名称进行匹配,可以通过name
属性指定名称,也可以按照类型进行匹配。
-
兼容性:
@Autowired
是Spring提供的注解,支持在Spring应用中使用。@Resource
是Java EE的规范,也可以在Spring应用中使用,但不同于@Autowired
,它并不是Spring的特有注解。
在实际使用中,选择使用哪个注解取决于具体的需求和习惯,两者在很多场景下可以互换使用。