package org.ruoyi.chat.factory; import org.ruoyi.chat.service.chat.IChatService; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * 聊天服务工厂类 * * @author ageerle@163.com * date 2025/5/10 */ @Component public class ChatServiceFactory implements ApplicationContextAware { private final Map chatServiceMap = new ConcurrentHashMap<>(); @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { // 初始化时收集所有IChatService的实现 Map serviceMap = applicationContext.getBeansOfType(IChatService.class); for (IChatService service : serviceMap.values()) { if (service != null) { chatServiceMap.put(service.getCategory(), service); } } } /** * 根据模型类别获取对应的聊天服务实现 */ public IChatService getChatService(String category) { IChatService service = chatServiceMap.get(category); if (service == null) { throw new IllegalArgumentException("不支持的模型类别: " + category); } return service; } }