我有这个Spring配置:
<bean id="boo" class="com.x.TheClass"/>
班级TheClass
实施TheInterface
。然后我有这个(假设的)Java代码:
@Autowired
TheInterface x;
@Autowired
TheClass y;
TheInterface
的自动装配有效,但TheClass
的自动装配失败。 Spring给了我一个NoSuchBeanDefinitionException
的课程。
为什么你可以连接界面而不是课程?
答案 0 :(得分:56)
通常,两者都可以,你可以自动装配接口或类。
在您的上下文中可能存在一个autoproxy生成器,它将您的boo
bean包装在生成的代理对象中。此代理对象将实现TheInterface
,但不会是TheClass
。使用自动代理时,您需要编程到接口,而不是实现。
可能的候选者是事务代理 - 您使用的是使用AspectJ或@Transactional
的Spring事务吗?