我有一个网络服务的工作电话;我们使用配置了注解的 Spring bean 来实现调用 Web 服务的逻辑:
@ManagedResource(objectName = "bean:name=XServiceMBean")
@Service("xService")
public class XServiceImpl implements XService
{
// working code here
}
出于测试目的,我想扩展这个类并注入子类而不是这个,所以我做了:
@ManagedResource(objectName = "bean:name=XServiceMBean")
@Service("xService")
public class XServiceImplTest extends XServiceImpl
{
// working code here
}
并注释掉超类中的两个注释行。
春天不喜欢它。当我跑步时,我得到:
Error creating bean with name 'xService':Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'xService' must be of type [com.hsc.correspondence.rules.XService], but was actually of type [com.hsc.correspondence.rules.impl.XServiceImplTest]
我再次尝试在我的子类上放置一个明确的“实现 XService”,结果相同。
我在春天做违法的事吗?原来的XServiceImpl里面有很多@Resource注解;我认为这并不重要,我希望他们像以前一样被注射。
有没有办法做我想做的事情,即有一个测试类,对原始文件的更改绝对最小化?(我会考虑在 XML 中进行配置,除非我不在我正在进行的项目中做出这些决定,但我认为这对我正在尝试做的事情并不重要。
额外的困惑:错误消息说“名为'xService'的Bean必须是...XService类型,但实际上是XServiceImplTest类型”。但是 XServiceImplTest 实现了 XService,就像 XServiceImpl 一样。
额外的困惑#2:我将整个 XServiceImpl 复制到 XServiceImplTest 类中,注释掉 XServiceImpl 中的注释,然后清理并重建并运行。得到了同样的结果。现在这两个类之间的唯一区别是它们的类名。它变得越来越陌生。谁能建议为什么 Spring 可能会关心类名是什么?