나는 (내가 그것을 잘못 생각하는) 스프링을 사용하여 Strategy
패턴을 적용하려고다른 bean의 속성을 기반으로 bean을 주입하는 방법은 무엇입니까? 다음과 같은
DirectoryUsersFetcher
이
public interface DirectoryUsersFetcher {
Iterator<String> importUsers(DirectoryUserDataSource dataSource);
}
같은 인터페이스입니다
@Component
public class DirectoryUserImportWorkflow {
private List<DirectoryUserDataSource> dataSources = Arrays.asList(new ActiveDirectoryDataSource(), new CsvDataSource());
@Autowired
private DirectoryUsersFetcher directoryUsersFetcher;
public void run() {
dataSources.forEach(dataSource -> directoryUsersFetcher.importUsers(dataSource));
}
}
처럼 내 주 클래스 본다
(구현이 2 개 포함)
@Component
public class ActiveDirectoryUsersFetcher implements DirectoryUsersFetcher {
public Iterator<String> importUsers(DirectoryUserDataSource dataSource) {
System.out.println("Returning data from Active Directory");
return Arrays.asList("ActiveDirectoryUser1", "ActiveDirectoryUser2", "ActiveDirectoryUser3").iterator();
}
}
및
@Component
public class CsvUsersFetcher implements DirectoryUsersFetcher {
public Iterator<String> importUsers(DirectoryUserDataSource dataSource) {
System.out.println("Returning data from CSV");
return Arrays.asList("CsvUser1", "CsvUser2", "CsvUser3").iterator();
}
}
DataSourceType
이
public enum DataSourceType {
DirectoryServer,
Csv
}
DataSource
자체가 내가 그들 중 하나를 기반으로 런타임에 사용하려는 함께
public interface DirectoryUserDataSource {
DataSourceType getType();
}
처럼 보이는 인터페이스입니다 2 구현으로
,210및
public class CsvDataSource implements DirectoryUserDataSource {
public DataSourceType getType() {
return DataSourceType.Csv;
}
}
내 test
내가이 문제를 해결할 수있는 방법
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'directoryUserImportWorkflow': Unsatisfied dependency expressed through field 'directoryUsersFetcher': No qualifying bean of type [com.learner.datafetcher.DirectoryUsersFetcher] is defined: expected single matching bean but found 2: activeDirectoryUsersFetcher,csvUsersFetcher; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.learner.datafetcher.DirectoryUsersFetcher] is defined: expected single matching bean but found 2: activeDirectoryUsersFetcher,csvUsersFetcher
입니다 참조 무엇
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {DirectoryUserImportWorkflow.class, ActiveDirectoryUsersFetcher.class, CsvUsersFetcher.class})
public class DirectoryUserImportWorkflowTest {
@Autowired
private DirectoryUserImportWorkflow workflow;
@Test
public void runStrategy() throws Exception {
workflow.run();
}
}
처럼 보인다?
내가 필요한 것?DataSource
가 ActiveDirectory
또는 Csv
무엇을 기반으로
ActiveDirectoryUsersFetcher
호출해야 또는
CsvUsersFetcher
어디 이해를 놓친 거지? 사전 그래서
왜 fetcher에 첫 번째 장소에서 데이터 소스? – zeroflagL