У меня есть эта конфигурация Spring:
<bean id="boo" class="com.x.TheClass"/>
Класс TheClass
реализации TheInterface
. Тогда у меня есть этот (гипотетический) код Java:
@Autowired
TheInterface x;
@Autowired
TheClass y;
Автопроводное соединение TheInterface
работы, но автопроводное соединение TheClass
сбои. Spring дает мне a NoSuchBeanDefinitionException
для класса.
Почему можно соединить проводом интерфейс а не класс?
Обычно работают оба, вы можете автоматически подключать интерфейсы или классы .
Вероятно, где-то в вашем контексте есть генератор автопрокси, который оборачивает ваш bean-компонент boo
в сгенерированный прокси-объект. Этот прокси-объект будет реализовывать TheInterface
, но не будет TheClass
. При использовании автопроксимации вам нужно программировать интерфейс, а не реализацию.
Вероятный кандидат - транзакционные прокси - используете ли вы транзакции Spring, используя AspectJ или @Transactional
?