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
有人经历过这件事吗
# 1 楼答案
对实现的强制转换违背了定义接口的意义
# 2 楼答案
为什么要将接口转换为它的实现?接口是为了防止这种情况。通常只应使用接口
由于默认情况下Spring不为类生成代理,只生成Java代理,所以从上下文中获得的bean实现了bean的所有接口,但不扩展bean本身(原始bean仅由代理包装)