Spring Autowiring class vs. interface?
autowired, dependency-injection, java, spring
Solution
Normally, both will work, you can autowire interfaces or classes.
There's probably an autoproxy generator somewhere in your context, which is wrapping your `boo` bean in a generated proxy object. This proxy object will implement `TheInterface`, but will not be a `TheClass`. 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`?
Problem
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?