Весна: Почему мы автоматически подключаем интерфейс, а не реализованный класс?
==============================================================================

**пример**

Может кто-то объяснить это мне.

Как весна знает, какой полиморфный тип использовать.Нужно ли мне`@Qualifier` или же`@Resource`?Почему мы автоматически подключаем интерфейс, а не реализованный класс?

Пока существует только одна реализация интерфейса и эта реализация аннотируется`@Component` при включенном сканировании компонентов Spring среда Spring может находить пару (интерфейс, реализация). Если компонентное сканирование не включено, вы должны явно определить компонент в вашем application-config.xml (или эквивалентном файле конфигурации Spring).

Нужен ли мне @Qualifier или @Resource?

Как только у вас будет более одной реализации, вам нужно будет квалифицировать каждую из них, а во время автоматической разводки вам нужно будет использовать`@Qualifier` аннотация для внедрения правильной реализации, наряду с`@Autowired` аннотаций. Если вы используете @Resource (семантика J2EE), то вы должны указать имя компонента с помощью`name` атрибут этой аннотации.

Почему мы автоматически подключаем интерфейс, а не реализованный класс?

Во-первых, всегда полезно кодировать интерфейсы в целом. Во-вторых, в случае весны вы можете внедрить любую реализацию во время выполнения. Типичным примером использования является внедрение фиктивной реализации на этапе тестирования.

Ваша конфигурация bean-компонента должна выглядеть следующим образом:

В качестве альтернативы, если вы включили сканирование компонентов в пакете, в котором они присутствуют, то вы должны квалифицировать каждый класс с помощью`@Component` следующее:

затем`worker` в`MyRunner` будет введен с экземпляром типа`B`.



[Cglib2AopProxy Невозможно прокси-метод](https://stackoverflow.com/questions/12690349/spring-application-has-cglib2aopproxy-warnings), И многие другие причины для этого описаны здесь[Почему всегда есть единственные интерфейсы реализации на уровнях обслуживания и дао?](https://stackoverflow.com/questions/8922135/why-always-have-single-implementaion-interfaces-in-service-and-dao-layers)