diff --git a/sms4j-solon-plugin/src/main/java/org/dromara/sms4j/solon/config/SupplierConfig.java b/sms4j-solon-plugin/src/main/java/org/dromara/sms4j/solon/config/SupplierConfig.java index b9a092a9..31a6905e 100644 --- a/sms4j-solon-plugin/src/main/java/org/dromara/sms4j/solon/config/SupplierConfig.java +++ b/sms4j-solon-plugin/src/main/java/org/dromara/sms4j/solon/config/SupplierConfig.java @@ -1,6 +1,9 @@ package org.dromara.sms4j.solon.config; +import cn.hutool.core.util.ObjectUtil; import org.dromara.sms4j.api.SmsBlend; +import org.dromara.sms4j.comm.constant.Constant; +import org.dromara.sms4j.comm.enums.ConfigType; import org.dromara.sms4j.provider.config.SmsConfig; import org.dromara.sms4j.provider.factory.BaseProviderFactory; import org.noear.solon.annotation.Bean; @@ -29,16 +32,37 @@ public class SupplierConfig { return obj; } - @Bean + @Bean("blends") public Map> blends() { return injectObj("sms.blends", new LinkedHashMap<>()); } + @Bean + @Condition(onBean = SmsConfig.class) + public List factoryList(@Inject("blends") Map> blends, SmsConfig smsConfig) throws Exception { + //注入自定义实现工厂 + List factoryList = new ArrayList<>(); + if (ConfigType.YAML.equals(smsConfig.getConfigType())) { + for (String configId : blends.keySet()) { + Map configMap = blends.get(configId); + Object factoryPath = configMap.get(Constant.FACTORY_PATH); + if (ObjectUtil.isNotEmpty(factoryPath)) { + //反射创建实例 + Class> newClass = (Class>) Class.forName(factoryPath.toString()); + BaseProviderFactory factory = newClass.newInstance(); + factoryList.add(factory); + } + } + } + + return factoryList; + } + @Bean public SmsBlendsInitializer smsBlendsInitializer(List factoryList, - SmsConfig smsConfig, - Map> blends) { + SmsConfig smsConfig, + @Inject("blends") Map> blends) { //todo: solon 不支持泛型的 List[Bean] 注入 List> factoryList2 = new ArrayList<>(factoryList.size());