在@Autowire使用时,默认使用by-Type的方式进行注入
而@Resource,默认使用by-Type的方式注入,但使用by-Name方式时,相比@Autowire较方便
public class SimpleMovieLister {
private MovieFinder movieFinder;
@Resource(name="myMovieFinder")
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
@Autowire
@Qualifer("myMovieFinder")
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
}
@Autowired
applies to fields, constructors, and multi-argument methods, allowing for narrowing through qualifier annotations at the parameter level. By contrast, @Resource
is supported only for fields and bean property setter methods with a single argument. As a consequence, stick with qualifiers if your injection target is a constructor or a multi-argument method.
@Autowire用于属性、构造器、多参数方法注入,可以通过@Qualifer变为by-Name方式
@Resource则支持属性、setter方法上的使用:如果名字没有明确指定,默认名从那个字段名或者方法名中推断出。如果是字段,就获取这个字段名;如果是setter方法,其获取bean的属性名。
所以,你在注入构造器与多参数方法时,请使用@Autowire与@Qualifer进行配合