我想在我的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 {
...
}
最佳答案
这是我的命题,我使用了Interface而不是抽象类,但是如果您确实需要抽象类,则可以在其上返回.
@Service
public class DocumentProcessorService {
@Autowired
// you can add here for examlpe a @Qualifier("typeXDocumentProcessor"),
// then name your variable whatever you want.
DocumentProcessor typeXDocumentProcessor;
@Autowired
DocumentProcessor typeYDocumentProcessor;
@Autowired
DocumentProcessor 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 implements DocumentProcessor {
...
}
@Component
public class TypeYDocumentProcessor implements DocumentProcessor {
...
}
@Component
public class TypeZDocumentProcessor implements DocumentProcessor {
...
}
public interface class DocumentProcessor {
...
}