在没有具体实现的接口的xml配置中创建spring bean

时间:2014-04-23 10:03:47

标签: java xml spring unit-testing

在我的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>

1 个答案:

答案 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());
    }
}