在我的Spring 3.x应用程序中,我提供了几个接口,其中的实现由运行时包含的某些第三方库提供。为了开发和单元测试,我想注入一些这些接口的模拟/虚拟实现。一个显而易见的方法是定义一个实现这些接口的具体类,并将它作为我的测试源。因为我只想要用于注入目的的虚拟类,我想知道在Spring XML配置中是否有一种方法可以通过它定义提供接口类的<bean>
元素并让spring从该接口创建一个代理类并注入它?
我知道我可以像mockito那样做,但在某些情况下,我不能/不能使用mockito,并希望看看这是否只有Spring才有可能。
<bean name="someServiceImpl" class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="foo.bar.SomeService" />
</bean>
答案 0 :(得分:2)
以下是使用Java Config并且基于JDK动态代理的配置示例。
public class TestInvocationHandler implements InvocationHandler {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
return null;
}
}
@Configuration
public class Config {
@Bean
@Profile("test")
@Primary
public SomeService someService() {
return (SomeService) Proxy.newProxyInstance(Config.class.getClassLoader(), new Class[] {SomeService.class}, new TestInvocationHandler());
}
}