mirror of
https://gitee.com/dromara/sms4j.git
synced 2025-12-06 08:58:38 +08:00
修改供应商创建相关代码,修改SE初始化方式
This commit is contained in:
parent
9b03996af6
commit
236ae38016
@ -17,7 +17,7 @@ public interface SmsRestrictedUtil {
|
||||
* @param time 过期时间(秒级单位)
|
||||
* @author :Wind
|
||||
*/
|
||||
public boolean setOrTime(String key, Object value, Long time) throws RuntimeException;
|
||||
boolean setOrTime(String key, Object value, Long time) throws RuntimeException;
|
||||
|
||||
/**
|
||||
* set
|
||||
@ -26,7 +26,7 @@ public interface SmsRestrictedUtil {
|
||||
* @param value 缓存value值
|
||||
* @author :Wind
|
||||
*/
|
||||
public boolean set(String key, Object value) throws RuntimeException;
|
||||
boolean set(String key, Object value) throws RuntimeException;
|
||||
|
||||
/**
|
||||
* getByKey
|
||||
@ -34,12 +34,12 @@ public interface SmsRestrictedUtil {
|
||||
* @param key redis的key
|
||||
* @author :Wind
|
||||
*/
|
||||
public Object getByKey(String key) throws RuntimeException;
|
||||
Object getByKey(String key) throws RuntimeException;
|
||||
|
||||
/**
|
||||
* clear
|
||||
* <p>清除缓存</p>
|
||||
* @author :Wind
|
||||
*/
|
||||
public void clean() throws RuntimeException;
|
||||
void clean() throws RuntimeException;
|
||||
}
|
||||
|
||||
@ -43,6 +43,11 @@ public abstract class Constant {
|
||||
*/
|
||||
public static final String HTTPS_PREFIX = "https://";
|
||||
|
||||
/**
|
||||
* 供应商配置键名
|
||||
*/
|
||||
public static final String SUPPLIER_KEY = "supplier";
|
||||
|
||||
private Constant() {
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,11 +4,13 @@ import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author wind
|
||||
@ -139,4 +141,26 @@ public class SmsUtil {
|
||||
return toStr.toArray(new String[list.size()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 将Map中所有key的分隔符转换为新的分隔符
|
||||
* @param map map对象
|
||||
* @param seperator 旧分隔符
|
||||
* @param newSeperator 新分隔符
|
||||
*/
|
||||
public static void replaceKeysSeperator(Map<String, String> map, String seperator, String newSeperator) {
|
||||
if(CollUtil.isEmpty(map)) {
|
||||
return;
|
||||
}
|
||||
List<String> keySet = new ArrayList<>(map.keySet());
|
||||
for(String key : keySet) {
|
||||
if(StrUtil.isEmpty(key) || !key.contains(seperator)) {
|
||||
continue;
|
||||
}
|
||||
String value = map.get(key);
|
||||
String newKey = key.replaceAll(seperator, newSeperator);
|
||||
map.putIfAbsent(newKey, value);
|
||||
map.remove(key);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -69,7 +69,7 @@ public abstract class SmsFactory {
|
||||
}
|
||||
|
||||
private static SmsBlend create(SupplierConfig config) {
|
||||
BaseProviderFactory factory = ProviderFactoryHolder.requireForConfig(config);
|
||||
BaseProviderFactory factory = ProviderFactoryHolder.requireForSupplier(config.getSupplier());
|
||||
if (factory == null) {
|
||||
throw new SmsBlendException("不支持当前供应商配置");
|
||||
}
|
||||
|
||||
@ -2,27 +2,38 @@ package org.dromara.sms4j.javase.config;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.io.resource.ClassPathResource;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.sms4j.aliyun.config.AlibabaConfig;
|
||||
import org.dromara.sms4j.api.SmsBlend;
|
||||
import org.dromara.sms4j.api.universal.SupplierConfig;
|
||||
import org.dromara.sms4j.cloopen.config.CloopenConfig;
|
||||
import org.dromara.sms4j.comm.config.SmsConfig;
|
||||
import org.dromara.sms4j.comm.constant.Constant;
|
||||
import org.dromara.sms4j.comm.exception.SmsBlendException;
|
||||
import org.dromara.sms4j.comm.factory.BeanFactory;
|
||||
import org.dromara.sms4j.comm.utils.SmsUtil;
|
||||
import org.dromara.sms4j.core.factory.SmsFactory;
|
||||
import org.dromara.sms4j.emay.config.EmayConfig;
|
||||
import org.dromara.sms4j.huawei.config.HuaweiConfig;
|
||||
import org.dromara.sms4j.javase.util.YamlUtil;
|
||||
import org.dromara.sms4j.jdcloud.config.JdCloudConfig;
|
||||
import org.dromara.sms4j.netease.config.NeteaseConfig;
|
||||
import org.dromara.sms4j.provider.config.BaseConfig;
|
||||
import org.dromara.sms4j.provider.factory.BaseProviderFactory;
|
||||
import org.dromara.sms4j.provider.factory.ProviderFactoryHolder;
|
||||
import org.dromara.sms4j.tencent.config.TencentConfig;
|
||||
import org.dromara.sms4j.unisms.config.UniConfig;
|
||||
import org.dromara.sms4j.yunpian.config.YunpianConfig;
|
||||
import org.dromara.sms4j.zhutong.config.ZhutongConfig;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 初始化类
|
||||
*/
|
||||
@ -88,45 +99,20 @@ public class SEInitializer {
|
||||
}
|
||||
|
||||
this.initSmsConfig(smsConfig);
|
||||
AlibabaConfig alibabaConfig = smsConfig.getAlibaba();
|
||||
if (alibabaConfig != null) {
|
||||
SmsFactory.createSmsBlend(alibabaConfig);
|
||||
}
|
||||
CloopenConfig cloopenConfig = smsConfig.getCloopen();
|
||||
if (cloopenConfig != null) {
|
||||
SmsFactory.createSmsBlend(cloopenConfig);
|
||||
}
|
||||
EmayConfig emayConfig = smsConfig.getEmay();
|
||||
if (emayConfig != null) {
|
||||
SmsFactory.createSmsBlend(emayConfig);
|
||||
}
|
||||
HuaweiConfig huaweiConfig = smsConfig.getHuawei();
|
||||
if (huaweiConfig != null) {
|
||||
SmsFactory.createSmsBlend(huaweiConfig);
|
||||
}
|
||||
JdCloudConfig jdCloudConfig = smsConfig.getJdCloud();
|
||||
if (jdCloudConfig != null) {
|
||||
SmsFactory.createSmsBlend(jdCloudConfig);
|
||||
}
|
||||
TencentConfig tencentConfig = smsConfig.getTencent();
|
||||
if (tencentConfig != null) {
|
||||
SmsFactory.createSmsBlend(tencentConfig);
|
||||
}
|
||||
UniConfig uniConfig = smsConfig.getUni();
|
||||
if (uniConfig != null) {
|
||||
SmsFactory.createSmsBlend(uniConfig);
|
||||
}
|
||||
YunpianConfig yunpianConfig = smsConfig.getYunpian();
|
||||
if (yunpianConfig != null) {
|
||||
SmsFactory.createSmsBlend(yunpianConfig);
|
||||
}
|
||||
NeteaseConfig neteaseConfig = smsConfig.getNeteaseConfig();
|
||||
if (neteaseConfig != null){
|
||||
SmsFactory.createSmsBlend(neteaseConfig);
|
||||
}
|
||||
ZhutongConfig zhutongConfig = smsConfig.getZhutongConfig();
|
||||
if (zhutongConfig != null){
|
||||
SmsFactory.createSmsBlend(zhutongConfig);
|
||||
// 解析供应商配置
|
||||
Map<String, Map<String, String>> blends = smsConfig.getBlends();
|
||||
for(String configId : blends.keySet()) {
|
||||
Map<String, String> configMap = blends.get(configId);
|
||||
String supplier = configMap.get(Constant.SUPPLIER_KEY);
|
||||
supplier = StrUtil.isEmpty(supplier) ? configId : supplier;
|
||||
BaseProviderFactory<SmsBlend, SupplierConfig> providerFactory = (BaseProviderFactory<SmsBlend, SupplierConfig>) ProviderFactoryHolder.requireForSupplier(supplier);
|
||||
if(providerFactory == null) {
|
||||
log.warn("创建\"{}\"的短信服务失败,未找到供应商为\"{}\"的服务", configId, supplier);
|
||||
}
|
||||
SmsUtil.replaceKeysSeperator(configMap, "-", "_");
|
||||
JSONObject configJson = new JSONObject(configMap);
|
||||
SupplierConfig supplierConfig = JSONUtil.toBean(configJson, providerFactory.getConfigClass());
|
||||
providerFactory.createSms(supplierConfig);
|
||||
}
|
||||
}
|
||||
|
||||
@ -147,16 +133,7 @@ public class SEInitializer {
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public static class InitSmsConfig extends SmsConfig {
|
||||
private AlibabaConfig alibaba;
|
||||
private CloopenConfig cloopen;
|
||||
private EmayConfig emay;
|
||||
private HuaweiConfig huawei;
|
||||
private JdCloudConfig jdCloud;
|
||||
private TencentConfig tencent;
|
||||
private UniConfig uni;
|
||||
private YunpianConfig yunpian;
|
||||
private NeteaseConfig neteaseConfig;
|
||||
private ZhutongConfig zhutongConfig;
|
||||
private Map<String, Map<String, String>> blends;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -3,7 +3,7 @@ package org.dromara.sms4j.aliyun.config;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.dromara.sms4j.aliyun.service.AlibabaSmsImpl;
|
||||
import org.dromara.sms4j.provider.factory.BaseProviderFactory;
|
||||
import org.dromara.sms4j.provider.factory.AbstractProviderFactory;
|
||||
import org.dromara.sms4j.provider.factory.ProviderFactoryHolder;
|
||||
|
||||
/**
|
||||
@ -14,7 +14,7 @@ import org.dromara.sms4j.provider.factory.ProviderFactoryHolder;
|
||||
* 2023/4/8 14:54
|
||||
**/
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class AlibabaFactory implements BaseProviderFactory<AlibabaSmsImpl, AlibabaConfig> {
|
||||
public class AlibabaFactory extends AbstractProviderFactory<AlibabaSmsImpl, AlibabaConfig> {
|
||||
|
||||
private static final AlibabaFactory INSTANCE = new AlibabaFactory();
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@ package org.dromara.sms4j.cloopen.config;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.dromara.sms4j.cloopen.service.CloopenSmsImpl;
|
||||
import org.dromara.sms4j.provider.factory.BaseProviderFactory;
|
||||
import org.dromara.sms4j.provider.factory.AbstractProviderFactory;
|
||||
import org.dromara.sms4j.provider.factory.ProviderFactoryHolder;
|
||||
|
||||
/**
|
||||
@ -13,7 +13,7 @@ import org.dromara.sms4j.provider.factory.ProviderFactoryHolder;
|
||||
* @since 2023/4/10 22:10
|
||||
*/
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class CloopenFactory implements BaseProviderFactory<CloopenSmsImpl, CloopenConfig> {
|
||||
public class CloopenFactory extends AbstractProviderFactory<CloopenSmsImpl, CloopenConfig> {
|
||||
|
||||
private static final CloopenFactory INSTANCE = new CloopenFactory();
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@ package org.dromara.sms4j.ctyun.config;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.dromara.sms4j.ctyun.service.CtyunSmsImpl;
|
||||
import org.dromara.sms4j.provider.factory.BaseProviderFactory;
|
||||
import org.dromara.sms4j.provider.factory.AbstractProviderFactory;
|
||||
import org.dromara.sms4j.provider.factory.ProviderFactoryHolder;
|
||||
|
||||
/**
|
||||
@ -14,7 +14,7 @@ import org.dromara.sms4j.provider.factory.ProviderFactoryHolder;
|
||||
* 2023/5/12 15:06
|
||||
**/
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class CtyunFactory implements BaseProviderFactory<CtyunSmsImpl, CtyunConfig> {
|
||||
public class CtyunFactory extends AbstractProviderFactory<CtyunSmsImpl, CtyunConfig> {
|
||||
|
||||
private static final CtyunFactory INSTANCE = new CtyunFactory();
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@ package org.dromara.sms4j.emay.config;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.dromara.sms4j.emay.service.EmaySmsImpl;
|
||||
import org.dromara.sms4j.provider.factory.BaseProviderFactory;
|
||||
import org.dromara.sms4j.provider.factory.AbstractProviderFactory;
|
||||
import org.dromara.sms4j.provider.factory.ProviderFactoryHolder;
|
||||
|
||||
/**
|
||||
@ -14,7 +14,7 @@ import org.dromara.sms4j.provider.factory.ProviderFactoryHolder;
|
||||
* @date 2023/04/11 12:00
|
||||
* */
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class EmayFactory implements BaseProviderFactory<EmaySmsImpl, EmayConfig> {
|
||||
public class EmayFactory extends AbstractProviderFactory<EmaySmsImpl, EmayConfig> {
|
||||
|
||||
private static final EmayFactory INSTANCE = new EmayFactory();
|
||||
|
||||
|
||||
@ -4,7 +4,7 @@ import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.dromara.sms4j.aliyun.service.AlibabaSmsImpl;
|
||||
import org.dromara.sms4j.huawei.service.HuaweiSmsImpl;
|
||||
import org.dromara.sms4j.provider.factory.BaseProviderFactory;
|
||||
import org.dromara.sms4j.provider.factory.AbstractProviderFactory;
|
||||
import org.dromara.sms4j.provider.factory.ProviderFactoryHolder;
|
||||
|
||||
/**
|
||||
@ -15,7 +15,7 @@ import org.dromara.sms4j.provider.factory.ProviderFactoryHolder;
|
||||
* 2023/4/8 15:27
|
||||
**/
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class HuaweiFactory implements BaseProviderFactory<HuaweiSmsImpl, HuaweiConfig> {
|
||||
public class HuaweiFactory extends AbstractProviderFactory<HuaweiSmsImpl, HuaweiConfig> {
|
||||
|
||||
private static final HuaweiFactory INSTANCE = new HuaweiFactory();
|
||||
|
||||
|
||||
@ -8,7 +8,7 @@ import com.jdcloud.sdk.service.sms.client.SmsClient;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.dromara.sms4j.jdcloud.service.JdCloudSmsImpl;
|
||||
import org.dromara.sms4j.provider.factory.BaseProviderFactory;
|
||||
import org.dromara.sms4j.provider.factory.AbstractProviderFactory;
|
||||
import org.dromara.sms4j.provider.factory.ProviderFactoryHolder;
|
||||
|
||||
/**
|
||||
@ -18,7 +18,7 @@ import org.dromara.sms4j.provider.factory.ProviderFactoryHolder;
|
||||
* @since 2023/4/10 20:01
|
||||
*/
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class JdCloudFactory implements BaseProviderFactory<JdCloudSmsImpl, JdCloudConfig> {
|
||||
public class JdCloudFactory extends AbstractProviderFactory<JdCloudSmsImpl, JdCloudConfig> {
|
||||
|
||||
private static final JdCloudFactory INSTANCE = new JdCloudFactory();
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@ package org.dromara.sms4j.netease.config;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.dromara.sms4j.netease.service.NeteaseSmsImpl;
|
||||
import org.dromara.sms4j.provider.factory.BaseProviderFactory;
|
||||
import org.dromara.sms4j.provider.factory.AbstractProviderFactory;
|
||||
import org.dromara.sms4j.provider.factory.ProviderFactoryHolder;
|
||||
|
||||
/**
|
||||
@ -14,7 +14,7 @@ import org.dromara.sms4j.provider.factory.ProviderFactoryHolder;
|
||||
* 2023-05-30
|
||||
**/
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class NeteaseFactory implements BaseProviderFactory<NeteaseSmsImpl, NeteaseConfig> {
|
||||
public class NeteaseFactory extends AbstractProviderFactory<NeteaseSmsImpl, NeteaseConfig> {
|
||||
|
||||
private static final NeteaseFactory INSTANCE = new NeteaseFactory();
|
||||
|
||||
|
||||
@ -0,0 +1,32 @@
|
||||
package org.dromara.sms4j.provider.factory;
|
||||
|
||||
import org.dromara.sms4j.api.SmsBlend;
|
||||
import org.dromara.sms4j.api.universal.SupplierConfig;
|
||||
|
||||
import java.lang.reflect.ParameterizedType;
|
||||
import java.lang.reflect.Type;
|
||||
|
||||
public abstract class AbstractProviderFactory<S extends SmsBlend, C extends SupplierConfig> implements BaseProviderFactory<S, C> {
|
||||
|
||||
private Class<C> configClass;
|
||||
|
||||
public AbstractProviderFactory() {
|
||||
Type genericSuperclass = getClass().getGenericSuperclass();
|
||||
if(genericSuperclass instanceof ParameterizedType) {
|
||||
ParameterizedType paramType = (ParameterizedType) genericSuperclass;
|
||||
Type[] typeArguments = paramType.getActualTypeArguments();
|
||||
if(typeArguments.length > 1 && typeArguments[1] instanceof Class) {
|
||||
configClass = (Class<C>) typeArguments[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取配置类
|
||||
* @return 配置类
|
||||
*/
|
||||
public Class<C> getConfigClass() {
|
||||
return configClass;
|
||||
}
|
||||
|
||||
}
|
||||
@ -19,10 +19,10 @@ public interface BaseProviderFactory<S extends SmsBlend, C extends SupplierConfi
|
||||
S createSms(C c);
|
||||
|
||||
/**
|
||||
* 创建配置对象
|
||||
* @return
|
||||
* 获取配置类
|
||||
* @return 配置类
|
||||
*/
|
||||
C createConfig();
|
||||
Class<C> getConfigClass();
|
||||
|
||||
/**
|
||||
* 获取供应商
|
||||
|
||||
@ -20,9 +20,9 @@ public class ProviderFactoryHolder {
|
||||
factories.add(factory);
|
||||
}
|
||||
|
||||
public static BaseProviderFactory<? extends SmsBlend, ? extends SupplierConfig> requireForConfig(SupplierConfig config) {
|
||||
public static BaseProviderFactory<? extends SmsBlend, ? extends SupplierConfig> requireForSupplier(String supplier) {
|
||||
return factories.stream()
|
||||
.filter(f -> f.getSupplier().equals(config.getSupplier()))
|
||||
.filter(f -> f.getSupplier().equals(supplier))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package org.dromara.sms4j.tencent.config;
|
||||
|
||||
import org.dromara.sms4j.provider.factory.BaseProviderFactory;
|
||||
import org.dromara.sms4j.provider.factory.AbstractProviderFactory;
|
||||
import org.dromara.sms4j.provider.factory.ProviderFactoryHolder;
|
||||
import org.dromara.sms4j.tencent.service.TencentSmsImpl;
|
||||
|
||||
@ -11,7 +11,7 @@ import org.dromara.sms4j.tencent.service.TencentSmsImpl;
|
||||
* @author :Wind
|
||||
* 2023/4/8 16:05
|
||||
**/
|
||||
public class TencentFactory implements BaseProviderFactory<TencentSmsImpl, TencentConfig> {
|
||||
public class TencentFactory extends AbstractProviderFactory<TencentSmsImpl, TencentConfig> {
|
||||
|
||||
private static final TencentFactory INSTANCE = new TencentFactory();
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@ package org.dromara.sms4j.unisms.config;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.dromara.sms4j.provider.factory.BaseProviderFactory;
|
||||
import org.dromara.sms4j.provider.factory.AbstractProviderFactory;
|
||||
import org.dromara.sms4j.provider.factory.ProviderFactoryHolder;
|
||||
import org.dromara.sms4j.unisms.core.Uni;
|
||||
import org.dromara.sms4j.unisms.service.UniSmsImpl;
|
||||
@ -14,7 +14,7 @@ import org.dromara.sms4j.unisms.service.UniSmsImpl;
|
||||
* 2023/4/8 15:46
|
||||
**/
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class UniFactory implements BaseProviderFactory<UniSmsImpl, UniConfig> {
|
||||
public class UniFactory extends AbstractProviderFactory<UniSmsImpl, UniConfig> {
|
||||
|
||||
private static final UniFactory INSTANCE = new UniFactory();
|
||||
|
||||
|
||||
@ -2,12 +2,12 @@ package org.dromara.sms4j.yunpian.config;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.dromara.sms4j.provider.factory.BaseProviderFactory;
|
||||
import org.dromara.sms4j.provider.factory.AbstractProviderFactory;
|
||||
import org.dromara.sms4j.provider.factory.ProviderFactoryHolder;
|
||||
import org.dromara.sms4j.yunpian.service.YunPianSmsImpl;
|
||||
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class YunPianFactory implements BaseProviderFactory<YunPianSmsImpl, YunpianConfig> {
|
||||
public class YunPianFactory extends AbstractProviderFactory<YunPianSmsImpl, YunpianConfig> {
|
||||
|
||||
private static final YunPianFactory INSTANCE = new YunPianFactory();
|
||||
|
||||
|
||||
@ -2,12 +2,12 @@ package org.dromara.sms4j.zhutong.config;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.dromara.sms4j.provider.factory.BaseProviderFactory;
|
||||
import org.dromara.sms4j.provider.factory.AbstractProviderFactory;
|
||||
import org.dromara.sms4j.provider.factory.ProviderFactoryHolder;
|
||||
import org.dromara.sms4j.zhutong.service.ZhutongSmsImpl;
|
||||
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class ZhutongFactory implements BaseProviderFactory<ZhutongSmsImpl, ZhutongConfig> {
|
||||
public class ZhutongFactory extends AbstractProviderFactory<ZhutongSmsImpl, ZhutongConfig> {
|
||||
private static final ZhutongFactory INSTANCE = new ZhutongFactory();
|
||||
|
||||
static {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user