我有一個帶有一些存盤庫(即 InMemory、資料庫)的 Spring Boot 應用程式,它們實作了一個通用介面 (IRepository),以及一個用于訪問它們的工廠,如下所示。
public class SomeRepositoryFactory {
public IRepository getRepository(String repoType) {
if (repoType == "Database") {
return new DatabaseRepository();
} else if (repoType == "InMemory") {
return new InMemoryRepository();
}
return null;
}
}
還有一個服務類,它有一個存盤庫作為依賴
public class SomeService {
private IRepository repository;
public SomeService (IRepository repository) {
this.repository = repository;
}
}
我設法使用以下配置手動將它們連接好
@Configuration
public class MyConfig {
@Bean
public SomeRepositoryFactory someRepositoryFactory() {
return new SomeRepositoryFactory();
}
@Bean
public IRepository someRepository() {
return someRepositoryFactory().getRepository("InMemory");
}
@Bean
public SomeService someService() {
return new SomeService(someRepository());
}
}
但是,我想嘗試使用自動裝配來完成此操作。特別是,我不確定如何使用從工廠檢索到的存盤庫注入服務類。理想情況下,我希望有一些這樣的注釋
@Component
@inject with SomeRepositoryFactory.getRepository.("InMemory")
public class SomeService {
private IRepository repository;
public SomeService (IRepository repository) {
this.repository = repository;
}
}
uj5u.com熱心網友回復:
如果您只有一個帶有介面實作的 bean,您只需像注入任何其他托管實體一樣注入它即可。您可以使用建構式注入@Autowire、setter 注入等。
這應該很簡單:
@Component
public class SomeService {
private IRepository repository;
// Constructor injection here, should find the bean from someRepository configuration method
public SomeService (IRepository repository) {
this.repository = repository;
}
}
如果您對同一個介面有多個實作,您可以使用以下注解注入@Qualifier:
@Component
public class SomeService {
private IRepository repository;
public SomeService (@Qualifier("someRepository") IRepository repository) {
this.repository = repository;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/379585.html
