2012-02-01 95 views
1

在我的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

您可能使用AOP来执行一些横切关注。检查接受的答案在这里:http://stackoverflow.com/questions/3852564/abstract-dao-pattern-and-springs-proxy-cannot-be-cast-to-problem – 2012-02-01 14:15:35

+0

谢谢!这帮助了我=) – user1143609 2012-02-01 17:07:53

回答

0

为什么要为其实现投射界面?接口是为了防止这种情况。您通常应该只使用接口。因为默认情况下,Spring不会为类生成代理,只有Java代理,您从上下文获得的bean实现了所有bean的接口,但不扩展bean本身(原始bean仅由代理包装)。

1
return (DefaultCustomerProvider) executor.getDefaultCustomerProviderService(); 

对实现的投射违反了定义接口的含义。

相关问题