2012-02-01 92 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(); 

對實現的投射違反了定義接口的含義。

相關問題