在Spring框架中,@Autowired
和@Resource
都是用于依赖注入的注解,它们可以用来自动装配Spring容器中的bean。尽管它们的目的相同,但它们之间存在一些差异:
@Autowired
@Autowired
是Spring框架自带的注解。- 它可以通过类型来自动装配,如果一个类有多个相同类型的依赖,可以通过
@Autowired
结合@Qualifier
注解来指定具体的bean。 @Autowired
可以应用于构造器、字段、设置方法和普通方法。- 默认情况下,
@Autowired
是按类型进行装配的,但也可以通过设置其required
属性为false
来使其成为可选的依赖。
@Resource
@Resource
是Java自带的注解,由JSR-250规范提供。- 它可以通过名称来自动装配,即它会尝试按照名称来查找并注入bean。
@Resource
可以应用于构造器、字段和设置方法。@Resource
默认按照名称进行装配,如果没有指定名称,则会尝试按类型进行装配。@Resource
有一个name
属性,可以通过它来指定要注入的bean的名称。
使用示例
@Service
public class MyService {
private MyDependency dependency;
@Autowired
public MyService(MyDependency dependency) {
this.dependency = dependency;
}
@Autowired
@Qualifier("specificBean")
public void setDependency(MyDependency dependency) {
this.dependency = dependency;
}
}
@Component
public class MyComponent {
@Resource(name="specificBean")
private MyDependency dependency;
}
我个人是比较推荐使用@Resource注解,不仅简单,代码整洁,而且容错率也高,关键能去掉IDEA的警告!