package jnpf.limsService.print; import jnpf.exception.DataException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Spring 启动时收集所有 {@link PrintTemplateRenderer} 实现,按 templateId 索引。 * Controller 通过 {@link #get(String)} 路由到具体 renderer。 */ @Component public class PrintRendererRegistry { private final Map renderers; @Autowired public PrintRendererRegistry(List rendererList) { Map map = new HashMap<>(); for (PrintTemplateRenderer r : rendererList) { String key = r.getTemplateId(); if (key == null || key.isEmpty()) { continue; } PrintTemplateRenderer existed = map.put(key, r); if (existed != null) { throw new IllegalStateException( "重复的 PrintTemplateRenderer template_id=" + key + ",冲突类: " + existed.getClass().getName() + " vs " + r.getClass().getName()); } } this.renderers = Collections.unmodifiableMap(map); } public PrintTemplateRenderer get(String templateId) { PrintTemplateRenderer r = renderers.get(templateId); if (r == null) { throw new DataException("找不到打印模板的渲染器: " + templateId); } return r; } }