我有一個對象,在Spring中注入到我的類中(如果你在意的話,可以使用JdbcCursorItemReader)。如何擁有一個Spring接口的動態代理?
它實現了5個接口,其中兩個我關心(ItemReader,ItemStream)。如果我在我的類代碼到一個或另一個,彈簧動態代理才能正確注射,我可以調用它的方法
private ItemReader blah;
public void setItemReader(blah) { this.blah = blah };
酷,按預期工作。我還可以將其轉換爲ItemStream,如果我想要做的基礎上,ItemStream接口的東西:
((ItemStream))blah.close();
酷,這讓我既級別的接入方式。不過,我不是一個喜歡投射的人,而且知道在哪裏必須成爲更好的春季魔術。我想到的辦法是作一個結合了一個接口:
public interface IStreamingItemReader<T> extends ItemReader<T>, ItemStream {
}
這讓我的代碼同時使用......但代理注入預見的失敗。
無法將屬性值轉換 類型[$ Proxy0實施 org.springframework.beans.factory.InitializingBean接口,org.springframework.batch.item.ItemReader,org.springframework.batch.item.ItemStream,組織.springframework.aop.scope.ScopedObject,org.springframework.aop.framework.AopInfrastructureBean,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] 所需的類型 [blah.IStreamingItemReader] for property 'itemReader';嵌套0例外是 java.lang.IllegalArgumentException異常: 無法將類型的價值[$ Proxy0 實施 org.springframework.beans.factory.InitializingBean接口,org.springframework.batch.item.ItemReader,org.springframework.batch.item .ItemStream,org.springframework.aop.scope.ScopedObject,org.springframework.aop.framework.AopInfrastructureBean,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [blah.IStreamingItemReader ]爲 屬性'itemReader':無匹配 編輯或轉換策略找到
,進行了我的眼睛的部分是 不匹配編輯或轉換戰略發現
有沒有辦法教春天,當它看到一個JdbcCursorItemReader,做出IStreamingItemReader的代理?
我知道我可以用CGLIB和基於類的代理解決這個問題......但如果我能保持這個作爲一個動態接口代理,我會更開心......