Я хочу использовать этот тип класса обслуживания в своем приложении Spring как "фабрику", чтобы вернуть правильную реализацию DocumentProcessor в ответ на предоставленное значение перечисления.
Я делаю это, потому что хочунастроить каждый процессор как компонент и воспользоваться преимуществами автоматического подключения по сравнению с просто созданием новых экземпляров, когда требуется каждый процессор.
На самом деле я не видел, чтобы это делалось где-либо еще - может кто-нибудь сказать мне, если этоплохая идея?
Все классы "TypeXYZDocumentProcessor" являются расширениями абстрактного базового класса "DocumentProcessor".
@Service
public class DocumentProcessorService {
@Autowired
TypeXDocumentProcessor typeXDocumentProcessor;
@Autowired
TypeYDocumentProcessor typeYDocumentProcessor;
@Autowired
TypeZDocumentProcessor typeZDocumentProcessor;
public DocumentProcessor getDocumentProcessor(DocumentType docType) {
switch (docType) {
case TYPE_X:
return typeXDocumentProcessor;
case TYPE_Y:
return typeYDocumentProcessor;
case TYPE_Z:
return typeZDocumentProcessor;
default:
return null;
}
}
}
@Component
public class TypeXDocumentProcessor extends DocumentProcessor {
...
}
public abstract class DocumentProcessor {
...
}