我正在使用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通过接口创建了一个代理,并且该类在调用处理程序中使用。因此,代理实现了该接口,但没有扩展该类,因此您无法将其强制转换为该接口。

07-24 22:31