Автоматическое подключение интерфейса означает соединение компонента, реализующего этот интерфейс.Это зависит от реализации, реально существующей на фабрике бинов.
@Autowired
UserService us; // wire a bean implementing UserService
-
@Service
public class UserServiceImpl implements UserService {
// the @Service annotation causes this implementation of UserService to
// be made available for wiring in the bean factory.
}
Стоит отметить, что если вы проводите по интерфейсу, Spring ожидает, что он будет существовать иточно один компонент на фабрике компонентов, реализующий этот интерфейс.Если найдено более одного компонента, выдается сообщение об ошибке, и вам необходимо указать, какой компонент следует подключить (используя аннотацию @Qualifier
).
РЕДАКТИРОВАТЬ:
При подключении выможет связывать переменную-член или метод установки.
@Autowired
UserService us;
-
@Autowired
public void setUserService(UserService us) {
this.us = us;
}
Эти два результата дают одинаковый результат.Разница в том, что в первом случае Spring будет использовать отражение, чтобы установить переменную us
для компонента, реализующего UserService.В последнем Spring будет вызывать метод setUserService
, передавая ту же реализацию UserService.