@Cacheableを使用して作成したAOPプロキシがSpring 3.1.1の依存関係注入を中断した場合、私はうんざりしました。私のシナリオは次のとおりです。@Cacheable breaks DependencyInjection
実装されたメソッドで@Cacheableを使用してこのインターフェイスを実装するクラスとインターフェイスがあります。
例インタフェース:
public interface ImgService {
public byte[] getImage(String name);
}
実装例:
public class ImgServiceImpl implements ImgService {
@Cacheable(cacheName = "someCache")
public byte[] getImage(String name){//TODO};
protected String someOtherMethod(){//};
}
Iはまた、JUnitテストクラスに持っ - インタフェースと一の実装を注入いずれか
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath*:META-INF/spring.xml" })
public class ImgServiceTest {
@Inject
private ImgService;
}
と
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath*:META-INF/spring.xml" })
public class ImgServiceImplTest {
@Inject
private ImgServiceImpl;
}
インターフェイスの依存関係注入が正常に動作します。しかし、2番目のテストクラスでインプリメンテーションを実行すると、"自動依存依存の注入が失敗しました"というメッセージが表示されます。私はそれをデバッグすることができました。ClassUtils.isAssignableValue()は、誤って目的のタイプをプロキシクラスと比較しています。 DefaultListableBeanFactoryによって呼び出されます。私は@Cacheableアノテーションを実装されたメソッドから削除し、それを他の保護された/プライベートなメソッドに追加すると、依存関係の注入が再びうまく機能するということは、他人には分かりません。これはバグですか、この状況を処理する正しい方法は何でしょうか?
ここに1つ以上である:これは次のように私の実装・テスト・クラスは今見え
:私は
org.springframework.aop.framework.Advised
クラスの実装に基づいてプロキシからターゲットオブジェクトを抽出しようと簡単な方法を実装しました良いリファレンス - http://blog.springsource.org/2012/05/23/understanding-proxy-usage-in-spring/ –