我有一个名为 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/