引起:java.lang.ClassCastException:$ ProxyX无法强制转换为my.package.DefaultCustomerProviderImpl

时间:2012-02-01 14:08:30

标签: java spring

在我的java课程中,我有:

@Autowired
@Qualifier("customerProviderExec")
private DefaultCustomerProvider customerProvider;

在我的上下文配置XML

<bean id="customerProviderExec" class="my.package.DefaultCustomerProviderExecutor">
    <property name="defaultCustomerProviderService" ref="customerProviderImpl" />   
</bean> 

<bean id="testCustomerProviderImpl" class="my.package.DefaultCustomerProviderTest">
    <property name="customerProviderImpl" ref="customerProviderImpl" />
</bean>    

<bean id="customerProviderImpl" class="my.package.DefaultCustomerProviderImpl">
    ...
</bean>

重要:类DefaultCustomerProviderImpl实现DefaultCustomerProvider

当我尝试在我的Java类中执行时:

DefaultCustomerProviderExecutor executor = (DefaultCustomerProviderExecutor)this.getCustomerProvider();
return (DefaultCustomerProviderImpl) executor.getDefaultCustomerProviderService();      

我收到错误:

引起:java.lang.ClassCastException:$ Proxy17无法强制转换为my.package.DefaultCustomerProviderImpl

有人通过这个吗?

2 个答案:

答案 0 :(得分:1)

return (DefaultCustomerProvider) executor.getDefaultCustomerProviderService();

强制执行实现是违背定义接口的意义。

答案 1 :(得分:0)

为什么要将接口强制转换为其实现?接口是为了防止这种情况。您通常应该只使用界面。

因为默认情况下Spring不为类生成代理,只生成Java代理,从上下文获取的bean实现了所有bean的接口,但不扩展bean本身(原始bean只由代理包装)。 / p>