我正在使用Factory Pattern来初始化对象:
public class Factory
{
@Autowired
private HandlerOne handlerOne;
@Autowired
private HandlerTwo handlerTwo;
public <T extends Handler> T createHandler(Class<T> type) {
switch(type.getSimpleName()){
case "HandlerOne":
return type.cast(handlerOne.handle());
}
}
这就是我如何使用工厂本身:
handlerFactory.createHandler(HandlerOne.class);
所有处理程序都位于名为com.mydomain.project.Handlers
如您所见,如果有X处理程序实现,我需要在工厂内创建X变量,我认为这很糟糕。是否存在可以应用的现有模式以使此过程更容易?
答案 0 :(得分:1)
Spring可以将所有类型的bean作为列表注入:
public class Factory
{
@Autowired
private List<? extends Handler> handlerList;
public <T extends Handler> T createHandler(Class<T> type) {
for(Handler handler : handlerList) {
if (type.getSimpleName().equals(handler.getClass().getSimpleName()) {
return handler;
}
}
return ...; //some default value
}
}