Spring Autowiring class vs. interface?

时间:2010-03-05 14:34:46

标签: java spring dependency-injection autowired

我有这个Spring配置:

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

班级TheClass实施TheInterface。然后我有这个(假设的)Java代码:

@Autowired
TheInterface x;

@Autowired
TheClass y;

TheInterface的自动装配有效,但TheClass的自动装配失败。 Spring给了我一个NoSuchBeanDefinitionException的课程。

为什么你可以连接界面而不是课程?

1 个答案:

答案 0 :(得分:56)

通常,两者都可以,你可以自动装配接口或类。

在您的上下文中可能存在一个autoproxy生成器,它将您的boo bean包装在生成的代理对象中。此代理对象将实现TheInterface,但不会是TheClass。使用自动代理时,您需要编程到接口,而不是实现。

可能的候选者是事务代理 - 您使用的是使用AspectJ或@Transactional的Spring事务吗?