java-Spring Autowiring类与接口?

我有这个春天的配置:

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

TheClass实现了TheInterface。然后,我得到了这个(假设的)Java代码:

@Autowired
TheInterface x;

@Autowired
TheClass y;

TheInterface的自动接线有效,但TheClass的自动接线失败。 春天给我上了NoSuchBeanDefinitionException这堂课。

为什么可以连接接口而不是类?

1个解决方案
56 votes

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

您的上下文中某处可能有一个自动代理生成器,它将boo bean包装在生成的代理对象中。 该代理对象将实现@Transactional,但不是TheClass。使用自动代理时,需要对接口进行编程,而不是对实现进行编程。

可能的候选对象是事务代理-您是否正在使用Spring事务,AspectJ或@Transactional

skaffman answered 2020-08-11T21:16:47Z
translate from https://stackoverflow.com:/questions/2387431/spring-autowiring-class-vs-interface