java - Spring 中 Autowiring 特定的内部 bean

标签 java spring spring-boot

我有一个名为 HttpClient 的接口(interface),以及该 bean 的两个 bean 实现,

 public interface HttpClient {
    String bla();
}


@Component
public class HttpClientImpl implements HttpClient {
    @Override
    public String bla() {
        return null;
    }
}


@Component
public class HttpClientMock implements HttpClient {
    @Override
    public String bla() {
        return null;
    }
}

现在我有一个用于注入(inject) HttpClient 的 bean 包装器

@Component
public class Wrapper {
    @Autowired HttpClient httpClient;
}

注入(inject)Wrapper时有什么方法可以选择

@Autowired Wrapper wrapper;

选择HttpClient的具体实现,我的意思是如果我想注入(inject)HttpClientMock

最佳答案

@Component("httpClient")
public class HttpClientImpl implements HttpClient {
    @Override
    public String bla() {
        return null;
    }
}

@Component("httpClientMock")
public class HttpClientMock implements HttpClient {
    @Override
    public String bla() {
        return null;
    }
}

@Component
public class Wrapper {
    @Autowired
    @Qualifier("httpClient")
    HttpClient httpClient;

    @Autowired
    @Qualifier("httpClientMock")
    HttpClient httpClientMock;
}

在这里,您似乎需要您的 httpClient 进行测试,在这种情况下,我不会说按照上述方式执行,而是创建如下所示的配置文件(您可以为其他配置文件创建不同的配置文件),并且当您运行 Spring 应用程序时,运行它在测试配置文件中。查找有关 spring profiles here 的更多信息

@Component("httpClientMock")
@Profile("test")
public class HttpClientMock implements HttpClient {
    @Override
    public String bla() {
        return null;
    }
}

关于java - Spring 中 Autowiring 特定的内部 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46840469/

相关文章:

java - textToBePresentInElement() 不适用于确切的文本

java - MySQL JDBC : Is there an option for automatic retry after InnoDB deadlock?

java - 如何在 springboot 2.x 中处理 @pathvariable 中的编码 url(包含特殊字符,如 %2F)?

java - 如何在 Spring Boot Gradle 项目的 .jar 根目录中构建文件夹?

java - HikariPool-1 - 驱动程序不支持获取/设置连接的网络超时。 (com.mysql.jdbc.JDBC4Connection.getNetworkTimeout()I)

java 堆栈作业 将数字放入堆栈

java - 在 Java 中将损坏的字符转换为正确的值

java - 为什么spring boot maven插件需要一个主类来打包war?

Spring MVC 无需请求即可获取WEB-INF下的文件

java - 声明静态 ApplicationContext 会导致内存泄漏吗? ( Spring 3)