无法将[$ Proxy1]类型的属性值转换为所需类型

时间:2011-03-24 23:59:54

标签: java spring

我正在使用一个使用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>

1 个答案:

答案 0 :(得分:2)

最好的选择是在界面中定义run()方法。

一个不太优选的选项是为您的交易方面指定proxy-target-class="true"(或者在您的对象周围设置代理的任何内容)

这不起作用的原因是spring已经通过接口创建了一个代理,并且该类在调用处理程序中使用。所以代理实现了接口,但没有扩展类,因此你无法转换它。