我有一个正常工作的调用web服务的功能;我们使用带有注解配置的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
}
我从超类中注释掉了两行注解。
Spring不喜欢这样做。当我运行时,会出现以下错误:
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]
我尝试了在我的子类上显式添加"implements XService",但结果相同。
在Spring中,我是否做了什么不合法的事情?原始的XServiceImpl中有很多@Resource注释;我认为这不会有影响,我希望它们像以前一样被注入。
有没有办法实现我想要的目标,即使对原始代码进行最小化的更改?(我考虑过在XML中进行配置,但是我不在项目中做出这些决策,但我认为这不会影响我所尝试的内容)。
额外的困惑:错误消息说“名为'xService'的Bean必须是类型...XService,但实际上是XServiceImplTest类型”。但是,XServiceImplTest像XServiceImpl一样实现了XService。
额外的困惑#2:我将整个XServiceImpl复制到类XServiceImplTest中,注释掉了XServiceImpl中的注释,并进行了清理、重建和运行。结果相同。现在这两个类之间唯一的区别就是它们的类名。它变得越来越奇怪。有人能够解释为什么Spring会关心类名吗?