使用过Spring的同学相信对这几个注解都已经很熟悉了,这几个都是用来做依赖注入的,我们挨个的来看一下。
@Autowired
@Autowired可以加在构造函数、方法、方法参数、成员变量、注解上,从Spring4.3开始,如果bean只有一个构造函数,或者只有一个primary/default的构造函数,那么构造函数上的@Autowired可以不加,否则还是要在某个构造函数上明确的加上@Autowired。
源码如下:
@Target({
ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {
boolean required() default true;
}
举个例子:
public class MovieRecommender {
private final CustomerPreferenceDao customerPreferenceDao;
//成员变量注入
@Autowired
private MovieCatalog movieCatalog;
//构造函数注入,此处可以省略
@Autowired
public MovieRecommender(CustomerPreferenceDao customerPreferenceDao) {
this.customerPreferenceDao = customerPreferenceDao;
}
}
还可以注入到集合里面:
public class MovieRecommender {
//所有的MovieCatalog类型的bean
@Autowired
private MovieCatalog[] movieCatalogs;
}
}
当然也可以注入到map:
public class MovieRecommender {
//map的key是bean的名字,value是bean:
private Map<String, MovieCatalog> movieCatalogs;
@Autowired
public void setMovieCatalogs(Map<String, MovieCatalog> m