Spring Класс autowiring vs. interface?

У меня есть этот Spring config:

<bean id="boo" class="com.x.TheClass"/>

Класс TheClass реализует TheInterface. Тогда у меня есть этот (гипотетический) код Java:

@Autowired
TheInterface x;

@Autowired
TheClass y;

Автоустановка TheInterface работает, но автоопределение TheClass завершается с ошибкой. Spring дает мне NoSuchBeanDefinitionException для класса.

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

Ответ 1

Как правило, оба будут работать, вы можете autwire интерфейсы или классы.

Вероятно, в вашем контексте есть автопрокси-генератор, который переносит ваш boo bean в сгенерированный прокси-объект. Этот прокси-объект будет реализовывать TheInterface, но не будет TheClass. При использовании autoproxies вам необходимо запрограммировать интерфейс, а не реализацию.

Вероятный кандидат - это транзакционные прокси - вы используете транзакции Spring, используя AspectJ или @Transactional?