更新:2016年2月
自动装配将在Spring Framework 4.3中正式支持。实现可以在这个GitHub commit看到。
你不能自动安装的最终原因是Spring的DefaultListableBeanFactory.findAutowireCandidates(String,Class,DependencyDescriptor)方法的实现明确排除了可能性。这在此方法的以下代码摘录中可见:
for (String candidateName : candidateNames) {
if (!candidateName.equals(beanName) && isAutowireCandidate(candidateName, descriptor)) {
result.put(candidateName, getBean(candidateName));
}
}
FYI:bean的名称(即,尝试自动安装的bean)是beanName。那个bean实际上是一个自动装配候选,但上面的if条件返回false(因为candidateName事实上等于beanName)。因此,你根本不能使用自身(至少不是Spring 3.1 M1)自动连接bean。
现在关于这是否是语义上的意图行为,这是另一个问题。 😉
我会问Juergen,看看他说什么。
问候,
Sam(核心弹簧提交者)
p.s.我已经打开了一个Spring JIRA问题,考虑通过类型使用@Autowired支持自动装配。请随时观看或投票支持此问题:https://jira.springsource.org/browse/SPR-8450