我们知道@Autowired普通用法就是注入Bean
例子如下:
@Autowired
private AgencySellerService agencySellerService;
其实@Autowired还可以放到方法上,进行注入:
@Autowired
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
同时还可以在方法中注入多个属性:
@Autowired
public void prepare(MovieCatalog movieCatalog,
CustomerPreferenceDao customerPreferenceDao) {
this.movieCatalog = movieCatalog;
this.customerPreferenceDao = customerPreferenceDao;
}
@Autowired
public void prepare(MovieCatalog movieCatalog,
CustomerPreferenceDao customerPreferenceDao) {
this.movieCatalog = movieCatalog;
this.customerPreferenceDao = customerPreferenceDao;
}
同时还可以放到一个数组上,将此类型的Bean都注入进来,如下:
@Autowired
private MovieCatalog[] movieCatalogs;
只要预期的键类型是String,就连类型化的映射都可以自动连接。映射值将包含预期类型的所有bean,键将包含相应的bean名称:
@Autowired
public void setMovieCatalogs(Map<String, MovieCatalog> movieCatalogs) {
this.movieCatalogs = movieCatalogs;
}
同时还可以注入spring自带的一些Bean属性,例如:ServletContext,BeanFactory,ApplicationContext,Enviroment,ResourceLoader,ApplicationEventPublisher,MessageSource,以及它们的扩展类,例如:ConfigurableApplicationContext或者ResourcePatternResolver等等。
@autowired、@Inject、@resource和@value注释是由Spring BeanPostProcessor实现来处理的,这意味着您不能在自己的BeanPostProcessor或BeanFactoryPostProcessor类型(如果有的话)中应用这些注释。这些类型必须通过XML显式地连接,或者使用Spring@bean方法。
同时还可以根据bean名称进行注入:
@Autowired
@Qualifier("main")
private MovieCatalog movieCatalog;
@Autowired
@Qualifier("main")
private MovieCatalog movieCatalog;
同时以上功能@Resource注解也是具备的。