SearchEngine 인터페이스의 새로운 구현체를 생성하고, 문서 유형을 추가하기 위해 몇 가지 세터 기반 의존성 주입을 사용해보자. 예제 3-3은 새로운 SearchEngineService 클래스다.
예제 3-3 SearchEngineService.java
package com.apress.isf.spring.service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.apress.isf.java.model.Document;
import com.apress.isf.java.model.Type;
import com.apress.isf.java.service.SearchEngine;
import com.apress.isf.spring.data.DocumentDAO;
public class SearchEngineService implements SearchEngine {
private DocumentDAO documentDAO;
public DocumentDAO getDocumentDAO() {
return documentDAO;
}
public void setDocumentDAO(DocumentDAO documentDAO) {
this.documentDAO = documentDAO;
}
public List<Document> findByType(Type documentType) {
List<Document> result = new ArrayList<Document>();
for (Document doc : listAll()) {
if (doc.getType().getName().equals(documentType.getName()))
result.add(doc);
}
return result;
}
public List<Document> listAll() {
return Arrays.asList(documentDAO.getAll());
}
}
예제 3-2와 예제 3-3을 비교해보자. 예제 3-3에서는 직접 집어넣은 코드와 storage 메서드를 제거하고, 세터 메서드를 통해 주입될 새로운 속성인 documentDAO를 추가했다. 하지만 스프링 컨테이너가 이 새로운 속성과 (데이터를 담을) 클래스를 알 수 있게 해줘야 한다.