我在编写JUnit测试时遇到一些奇怪的问题,我能够自动连接一个服务实现类,但不能自动连接另一个服务实现类。 ServiceImpl1和ServiceImpl2的applicationContext配置类似。
@Autowired
private ServiceImpl1 serviceImpl1; //This one works.
@Autowired
private ServiceImpl2 serviceImpl2; //This one doesn't work.
但是这个会起作用
@Autowired
private Service2 service2; //This one works.
这里ServiceImpl2是Service2的实现类。如何从service2获取ServiceImpl2的实例?
我想测试一些ServiceImpl2的方法,这些方法不在Service2接口中。
或者,如果您知道我如何使Autowired可以用于ServiceImpl2类?
最佳答案
我从另一个帖子中找到了答案。
我发现对我有好处的解决方案
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());
}