有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

spring由:java引起。lang.ClassCastException:$ProxyX不能强制转换为my。包裹DefaultCustomerProviderImpl

在我的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。包裹DefaultCustomerProviderImpl

有人经历过这件事吗


共 (2) 个答案

  1. # 1 楼答案

    return (DefaultCustomerProvider) executor.getDefaultCustomerProviderService();
    

    对实现的强制转换违背了定义接口的意义

  2. # 2 楼答案

    为什么要将接口转换为它的实现?接口是为了防止这种情况。通常只应使用接口

    由于默认情况下Spring不为类生成代理,只生成Java代理,所以从上下文中获得的bean实现了bean的所有接口,但不扩展bean本身(原始bean仅由代理包装)