2012-02-01 18 views
1

にキャストすることはできません。

@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

にキャストすることができない誰かがこのthrougされましたか?

+2

おそらくAOPを使用してクロスカッティングの問題を実行しています。ここで受け入れられた答えを確認してください:http://stackoverflow.com/questions/3852564/abstract-dao-pattern-and-springs-proxy-cannot-be-cast-to-problem –

+0

ありがとう!それは私を助けた=) – user1143609

答えて

0

なぜインターフェイスをその実装にキャストしますか?インターフェースはこれを防ぐためのものです。通常はインターフェイスのみを使用する必要があります。

デフォルトでは、Springはクラスのプロキシを生成しないため、Javaプロキシのみがコンテキストから取得しますが、Beanのインタフェースはすべて実装されていますが、Bean自体は拡張されません(元のBeanはプロキシによってのみラップされます)。

1
return (DefaultCustomerProvider) executor.getDefaultCustomerProviderService(); 

インターフェイスに定義されていることの意味を無視しています。

関連する問題