2017-10-19 59 views
1

我有一個叫HttpClient的Autowire特定內部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; 
    } 
} 

現在我接口,以及兩個beans實現bean的,有一個這個bean注入的包裝TS HttpClient的

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

有什麼辦法可以選擇,當我注入Wrapper

@Autowired Wrapper wrapper; 

選擇爲HttpClient具體實施中,我的意思是,如果我想注入HttpClientMock

回答

2
@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進行測試,在這種情況下,我wouldnt說上面做的方式,而下面給出(你可以有其他的不同的配置文件)創建配置文件,當你運行你的春天應用程序,運行它在測試配置文件。查找更多有關spring profiles here的信息

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