@Autowired
和 @Resource
这两个注解都用于自动装配 Spring Bean,但它们具有以下不同点:
-
来源不同:
@Autowired
是 Spring 框架的注解,而@Resource
是 JavaEE 的注解,被 Spring 框架支持。 -
属性注入方式不同:
@Autowired
可以用于字段、方法、构造函数等的注入,且支持@Qualifier
注解来指定具体 Bean 的名称;而@Resource
可以用于字段、setter 方法上,不支持构造函数注入,可以通过name
属性来指定 Bean 的名称,或者直接使用默认的按照名称装配的方式。 -
类型匹配策略不同:
@Autowired
会根据类型匹配来选择注入,如果有多个相同类型的 Bean,则需要使用@Qualifier
注解来指定具体的 Bean 名称,否则会抛出 NoUniqueBeanDefinitionException 异常;而@Resource
可以根据 name 属性来指定 Bean 的名称,也可以根据类型匹配来选择注入,如果有多个相同类型的 Bean,则需要使用@Qualifier
一起使用。
因此,建议在 Spring 框架的应用程序中,尽可能使用 @Autowired
来进行 Bean 注入,因为它有更多的灵活性和可扩展性,并且更易于使用。而 @Resource
是用于兼容 JavaEE 的注解,在 Spring 框架中使用较少。