我正在使用Spring框架的Java Web应用程序上工作。
该应用程序具有一个称为ServiceA的类,如下所示。
Interface1Impl实现Interface1并扩展Dao2类。
在Servicea.do()方法中,将x强制转换为Dao2会引发异常,指出“未能将类型[$ Proxy1]的属性值转换为所需的类型[Dao2]”
如何解决此问题,以便可以将x强制转换为Dao2?谢谢。
public class ServiceA
{
private final Interface1 x; // injected
public ServiceA(Interface1 aInterface1Impl)
{
x = aInterface1Impl;
}
public string do()
{
// Exception: Failed to convert property value of type [$Proxy1]
// to required type [Dao2]
Dao2 dao = (Dao2)x;
return dao.run();
}
}
这是部分spring配置文件
<bean id="dao-t" class="Interface1Impl">
<property name="ibatis" ref="ibatis-main"/>
</bean>
<bean id="proj" class="ServiceA">
<constructor-arg ref="dao-t"/>
</bean>
最佳答案
最好的选择是在接口中定义run()
方法。
不太可取的选择是在事务方面指定proxy-target-class="true"
(或使对象周围成为代理的任何东西)
这不起作用的原因是spring通过接口创建了一个代理,并且该类在调用处理程序中使用。因此,代理实现了该接口,但没有扩展该类,因此您无法将其强制转换为该接口。