Весенний класс проводки против интерфейса? - PullRequest
41 голосов
/ 05 марта 2010

У меня есть этот весенний конфиг:

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

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

@Autowired
TheInterface x;

@Autowired
TheClass y;

Автопроводка TheInterface работает, но автопроводка TheClass не работает. Весна дает мне NoSuchBeanDefinitionException для класса.

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

1 Ответ

56 голосов
/ 05 марта 2010

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

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

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

...