2011-03-24 64 views
1

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

回答

2

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

一个不太可取的选择是指定proxy-target-class="true"到您的事务方面(或任何使代理人在你的对象)

这不工作的原因是,春天已经创造了通过接口的代理,并使用类在调用处理程序中。所以代理实现了接口,但不扩展这个类,因此你不能投射它。

相关问题