java - 在xml配置中为没有具体实现的接口(interface)创建spring bean

标签 java xml spring unit-testing

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

相关文章:

java - 基于 web 的远程桌面,用于连接到 android

java - 使用 JAXB 编码只能包含多个子节点类型之一的 XML 节点(SharePoint 查询)

c# - XmlReader 跳过元素

java - JUnit hibernate : testing lazy associations fetched

java - 使用 jersey 的 java Restful Web 服务出现 404 错误

java - 如何在我的 Java 程序中实现 "this"?

java - 使用 Dockerfile 将 excel (.xls) 文件复制到容器

php - 将mysql表导出到xml

java - 如何阻止和订阅 Flux\mono

java - 在 Spring Integration 中等待所有线程完成