在我的 Spring 3.x 应用程序中,我有几个接口(interface),它们的实现是由运行时包含的一些第三方库提供的。为了开发和单元测试,我想注入(inject)这些接口(interface)的一些模拟/虚拟实现。一种明显的方法是定义一个实现这些接口(interface)的具体类,并将其作为我的测试源。因为我只想要用于注入(inject)目的的虚拟类,所以我想知道 Spring XML 配置中是否有一种方法可以通过它定义 <bean>
元素提供接口(interface)类并让 spring 从该接口(interface)创建一个代理类并注入(inject)它?
我知道我可以像下面这样用mockito来做到这一点,但在某些情况下我不/不能使用mockito,并且想看看这是否只能用Spring来实现。
<bean name="someServiceImpl" class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="foo.bar.SomeService" />
</bean>
最佳答案
以下是您使用 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());
}
}
关于java - 在xml配置中为没有具体实现的接口(interface)创建spring bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23241037/