Обновление: февраль 2016 г.
Самостоятельная автоматическая разводка будет официально поддерживаться в Spring Framework 4.3.Реализацию можно увидеть в этом коммите GitHub .
. Определенная причина, по которой вы не можете самостоятельно подключаться, заключается в том, что реализация метода Spring * DefaultListableBeanFactory.findAutowireCandidates(String, Class, DependencyDescriptor)
явно исключает такую возможность.Это видно из следующей выдержки из этого метода:
for (String candidateName : candidateNames) {
if (!candidateName.equals(beanName) && isAutowireCandidate(candidateName, descriptor)) {
result.put(candidateName, getBean(candidateName));
}
}
FYI: имя компонента (т. Е. Компонента, который пытается автоматически подключиться) - beanName
.Этот бин на самом деле является кандидатом autowire, но вышеприведенное условие if возвращает false (поскольку candidateName
фактически равно beanName
).Таким образом, вы просто не можете автоматически связывать бин с самим собой (по крайней мере, не начиная с Spring 3.1 M1).
Теперь о том, является ли это предполагаемым поведением семантически говоря, это другой вопрос.;)
Я спрошу Юргена и посмотрю, что он скажет.
С уважением,
Сэм (Core Spring Committer)
ps I 'Мы открыли проблему Spring JIRA, чтобы рассмотреть возможность поддержки самостоятельной автопроводки по типу с использованием @Autowired.Не стесняйтесь смотреть или голосовать за эту проблему здесь: https://jira.springsource.org/browse/SPR-8450