我正在使用一个使用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();
}
}
这是部分弹簧配置文件
<bean id="dao-t" class="Interface1Impl">
<property name="ibatis" ref="ibatis-main"/>
</bean>
<bean id="proj" class="ServiceA">
<constructor-arg ref="dao-t"/>
</bean>
答案 0 :(得分:2)
最好的选择是在界面中定义run()
方法。
一个不太优选的选项是为您的交易方面指定proxy-target-class="true"
(或者在您的对象周围设置代理的任何内容)
这不起作用的原因是spring已经通过接口创建了一个代理,并且该类在调用处理程序中使用。所以代理实现了接口,但没有扩展类,因此你无法转换它。