@resource和@autowire的区别
在 Spring 中,@Resource 和 @Autowired 注解都可以用来实现依赖注入,它们之间的区别如下:
- 来源不同
@Resource 注解是由 JavaEE 提供的,而 @Autowired 注解是由 Spring 提供的。
- 注入方式不同
@Resource 注解默认按照名称注入,如果找不到与名称匹配的 Bean,则按照类型注入。例如:
@Resource
private UserDao userDao; // 按照名称 "userDao" 注入
名称可以通过name属性指定,如果没有指定name属性,当注解写在字段上时,默认取字段名,当注解写在setter方法上时,默认取属性名进行装配。
注意:如果name属性一旦指定,就只会按照名称进行装配。
@Autowired 注解默认按照类型注入,如果有多个与类型匹配的 Bean,则根据名称进行匹配。例如:
@Autowired
private UserDao userDao; // 按照类型 "UserDao" 注入
@Autowire和@Qualifier配合使用效果和@Resource一样
- 支持的类型不同
@Resource 注解可以注入任何类型的 Bean,包括基本类型和字符串类型。
@Autowired 注解只能注入 Spring 管理的 Bean,不能注入基本类型和字符串类型。
- required 属性不同
@Resource 注解有一个 required 属性,默认值为 true,表示必须注入成功,否则抛出异常。
@Autowired 注解有一个 required 属性,默认值为 true,表示必须注入成功,否则抛出异常。同时,@Autowired 注解还有一个可选的属性:@Autowired(required = false),表示注入失败时不抛出异常。
- 注解的方式不同
@Autowired可以使用在字段和方法上,而@Resource只能使用在字段上
综上所述,@Resource 注解更为灵活,可以注入任何类型的 Bean,但其默认按照名称注入,不够直观;而 @Autowired 注解更为常用,可以根据类型自动注入,但只能注入 Spring 管理的 Bean。在使用时,应根据实际情况进行选择。