java - Spring Autowiring 类与接口(interface)?

标签 java spring dependency-injection autowired

我有这个 Spring 配置:

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

TheClass 类实现 TheInterface。然后我有这个(假设的)Java代码:

@Autowired
TheInterface x;

@Autowired
TheClass y;

TheInterface 的 Autowiring 有效,但 TheClass 的 Autowiring 失败。 Spring 为该类提供了一个 NoSuchBeanDefinitionException

为什么你可以连接接口(interface)而不是类?

最佳答案

通常,两者都可以,您可以 Autowiring 接口(interface)或类。

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

可能的候选者是事务代理 - 您使用的是 Spring 事务、使用 AspectJ 还是 @Transactional

关于java - Spring Autowiring 类与接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2387431/

相关文章:

java - 如何扩展 `java.util` 中的包私有(private)类

java - Spring data mongo 在查询中使用 OR

java - guice绑定(bind)到实例和asEagersingleton有什么区别

java - 播放列表随机播放开/关

java - Spring MVC 国际化 : Content not changing as per the selected language

Spring boot @Autowired 在服务器启动期间在 servlet 中不起作用

spring - 在 Spring Security OAuth2 中使用用户名密码授权中的刷新 token 请求新的访问 token

android - Dagger 2 基于上下文的范围

c++ - 关于服务定位器模式

java - 删除连字符分隔的大字符串中的重复字符串集