在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的警告!