Java @任意配置方法上的自动连线
在Spring参考指南中,它说您可以将@Autowired注释应用于具有任意名称和/或多个参数的方法,如以下代码所示Java @任意配置方法上的自动连线,java,spring,Java,Spring,在Spring参考指南中,它说您可以将@Autowired注释应用于具有任意名称和/或多个参数的方法,如以下代码所示 public class MovieRecommender { private MovieCatalog movieCatalog; private CustomerPreferenceDao customerPreferenceDao; @Autowired public void prepare(MovieCatalog movieCat
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在这种情况下是如何工作的 它并没有说您可以使用@Autowired实现它所说的任何方法 配置方法可以有任意名称和任意数量的参数;这些参数中的每一个都将与Spring容器中的匹配bean自动关联
无论方法名是什么,@Autowired将在spring上下文初始化期间尝试获取自动连接 注释@Autowired
并不真正关心您使用的方法名。因此,像prepare
这样的方法名与沿着setMovieCatalog
行的方法名一样有效
此外,Spring还使用@Autowired
处理方法中的多个参数。这通常用于基于构造函数的注入,但对于其他方法(如prepare
-method)效果很好
那么,要使这项工作发挥作用需要什么呢?首先,该方法的参数必须是Spring上下文已知的bean。这意味着Bean必须在XML上下文中连接,并用@组件
或@配置
类中的@Bean
进行注释。其次,保存@Autowired
方法的类也必须是Spring上下文已知的bean
如果上述两项都得到满足,则自动连线将按预期工作。它可以在任何实例方法上使用,无论名称如何。为什么这不是setter方法?因此,在初始化过程中,容器将调用带有
@Autowired
注释的任何方法,对吗?它不需要是setter方法或构造函数方法,您是对的。只要您已经初始化了bean,并与方法参数中给定的类匹配,它就可以工作。
<beans>
<bean id="myBean" class="..." init-method="prepare"/>
</beans>