I have this Spring config:
<bean id="boo" class="com.x.TheClass"/>
The class TheClass implements TheInterface. Then I have this (hypothetical) Java code:
@Autowired
TheInterface x;
@Autowired
TheClass y;
The autowiring of TheInterface works but the autowiring of TheClass fails. Spring gives me a NoSuchBeanDefinitionException for the class.
Why can you wire the interface and not the class?
Normally, both will work, you can autowire interfaces or classes.
There’s probably an autoproxy generator somewhere in your context, which is wrapping your
boobean in a generated proxy object. This proxy object will implementTheInterface, but will not be aTheClass. When using autoproxies, you need to program to the interface, not the implementation.The likely candidate is transactional proxies – are you using Spring transactions, using AspectJ or
@Transactional?