2017-02-14 6 views
0

JUnitテストを書くときに私はいくつかの奇妙な問題があります。私はあるサービス実装クラスをAutowiredできますが、別のものをAutowiredできません。 ServiceImpl1とServiceImpl2のapplicationContext構成は似ています。 Javaのプロキシインスタンスから実装クラスインスタンスを取得する方法

@Autowired 
private ServiceImpl1 serviceImpl1; //This one works. 

@Autowired 
private ServiceImpl2 serviceImpl2; //This one doesn't work. 

しかし、この1つはここServiceImpl2

@Autowired 
private Service2 service2; //This one works. 

動作するには、サービス2の実装クラスです。 service2からServiceImpl2のインスタンスを取得するにはどうすればよいですか?

インターフェイスService2にないServiceImpl2のいくつかのメソッドをテストしたいと思います。

また、ServiceImpl2クラスの自動配線作業をどのように行うことができますか?

+0

に作成された豆ソリューション私にとっては良いがあり見つけますか? – Stultuske

+0

はい。 ServiceImpl1とServiceImpl2は同じapplicationContext.xmlに設定されています –

+0

どのようなエラーが表示されますか? – Stultuske

答えて

0

他の投稿から回答が見つかりました。

は、私はあなたがそのタイプにautowireできるように構成/ http://www.techper.net/2009/06/05/how-to-acess-target-object-behind-a-spring-proxy/

@SuppressWarnings({"unchecked"}) 
protected <T> T getTargetObject(Object proxy, Class<T> targetClass) throws Exception { 
    if (AopUtils.isJdkDynamicProxy(proxy)) { 
    return (T) ((Advised)proxy).getTargetSource().getTarget(); 
    } else { 
    return (T) proxy; // expected to be cglib proxy then, which is simply a specialized class 
    } 
} 

使用

@Override 
protected void onSetUp() throws Exception { 
    getTargetObject(fooBean, FooBeanImpl.class).setBarRepository(new MyStubBarRepository()); 
} 
関連する問題