在Spring参考指南中,它表示您可以将@Autowired注释应用于具有任意名称和/或多个参数的方法,如以下代码所示。
public class MovieRecommender {
private MovieCatalog movieCatalog;
private CustomerPreferenceDao customerPreferenceDao;
@Autowired
public void prepare(MovieCatalog movieCatalog,
CustomerPreferenceDao customerPreferenceDao) {
this.movieCatalog = movieCatalog;
this.customerPreferenceDao = customerPreferenceDao;
}
// ...
}
但是Spring容器不会调用prepare()方法,因为它不是setter方法。 @Autowired如何在这种情况下工作?
答案 0 :(得分:2)
它并没有说你可以将@Autowired用于任何方法
配置方法 可能有任意名称和任意数量的参数;每个参数都将使用Spring容器中的匹配bean进行自动装配。
<beans>
<bean id="myBean" class="..." init-method="prepare"/>
</beans>
答案 1 :(得分:2)
注释@Autowired
并不关心您使用的是哪个方法名称。因此,类似prepare
的方法名称与setMovieCatalog
的方法名称一样有用。
此外,Spring还使用@Autowired
处理方法中的多个参数。这通常用于基于构造函数的注入,但对于其他方法(例如prepare
- 方法)可以正常工作。
那么,做这项工作需要什么?好吧,首先,该方法的参数必须是Spring上下文已知的bean。这意味着必须在XML上下文中连接bean,并使用@Component
或@Bean
类中的@Configuration
进行注释。其次,保存@Autowired
方法的类也必须是Spring上下文已知的bean。
如果满足以上两个要求,@Autowired
只是按预期工作。无论名称如何,它都可以用于任何实例方法。
答案 2 :(得分:1)
无论方法名称是什么,@ Autowired都会在弹簧上下文初始化期间尝试获取自动连线。