回答
@Autowired
和 @Resource
都是用于实现依赖注入的注解,虽然作用一样,但是他们还是存在一些差异。
@Autowired
是 Spring 框架提供的注解,主要用于根据类型自动装配 Bean。它可以与构造函数、方法或字段一起使用,并且支持可选的属性设置,我们可以添加required = false
,这就表明如果找不到依赖,Spring 不会抛出异常@Resource
是 Java EE 规范中的注解,它首先会根据名称进行装配,如果找不到匹配的 Bean,才会根据类型进行装配,如果还找不到就会抛出异常。
总的来说就是,一个是 Spring 特有的,一个属于 JSR-250 标准,适用于所有的 Java EE 环境。
详解
@Autowired
@Autowired
是 Spring 提供的注解,它只按照 byType
方式注入,在默认情况下它要求依赖对象必须存在,如果允许不存在,则我们可以配置它的 required
属性为 false
。
然而,在一些场景下,只按照 byType
的方式来注入其实是不现实的,因为如果在 Spring 容器中存在多个相同类型的 Bean,这时仅通过类型无法唯一确定要注入的 Bean,这个时候就可以结合 @Qualifier
来指定 Bean 的名称,如下:
@Component
public class UserService {
@Autowired
@Qualifier("customUserRepository")
private UserRepository userRepository;
// 其他业务逻辑
}