首页 > 微信 > 详细

工厂模式-企业微信应用配置代码优化

时间:2020-02-15 14:59:41      阅读:92      评论:0      收藏:0      [点我收藏+]

一.为什么要使用工厂模式去优化代码

  现有的企业微信应用中,多个配置的应用Id不同,不同的应用需要各种定制化的配置,例如在企业微信消息推送中,通常使用@ComfigurationProperties去读取配置文件中的配置,然后在不同的定时任务中使用@AutoWired去注入相关的配置类,这样有一个缺点,配置类和不同的定时任务耦合度太高了,多个应用的配置类不好管理,因此使用配置工厂去生产不同的配置,降低配置与定时任务之间的耦合,便于管理不同的配置;

 

二.优化之前的代码

@Data
@Component
@ConfigurationProperties(prefix = "wxapp1")
public class WxApp1{

    /** 企业Id */
    private String corpid;

    /** 企业号密钥 */
    private String corpsecret;

    /** 企业应用的id */
    private Integer agentId;

    /** 消息推送url */
    private String sendMessageUrl;
}
@Data
@Component
@ConfigurationProperties(prefix = "wxapp2")
public class WxApp2{

    /** 企业Id */
    private String corpid;

    /** 企业号密钥 */
    private String corpsecret;

    /** 企业应用的id */
    private Integer agentId;

    /** 消息推送url */
    private String sendMessageUrl;
}

消息推送相关

@Slf4j
@Component
public class WxMessageTask {

    @Autowired
    private WxApp1 app1;

    @Scheduled(cron = "0 0 10 1/1 * ?")
    public void pushMessage(){
        app1.xxx
        .....
        .....
    }    

三.优化之后的代码

企业微信应用枚举类

@Getter
@AllArgsConstructor
public enum WxAppEnum {

    CORP_DAILY(1,"应用1"),

    WG_DATA(2,"应用2");

    /** 企业微信代码 */
    private int code;
    /** 企业微信应用 */
    private String wxAppName;
}

企业微信配置枚举 configName为Spring注入的bean的名称

@Getter
@AllArgsConstructor
public enum  WxAppConfigEnum {

    WG_DATA_CONFIG(WxAppEnum.WG_DATA,"wgDataWechatConfig"),
    CORP_DAILY_CONFIG(WxAppEnum.CORP_DAILY,"corpWechatConfig");

    private WxAppEnum wxAppEnum;
    private String configName;

    /**
     * 获取微信应用配置枚举
     * @param valueName
     * @return
     */
    public static WxAppConfigEnum valueOfConfigName(String valueName){
        return Stream.of(values()).filter(x->x.getConfigName().equals(valueName))
                .findFirst()
                .orElse(null);
    }

    /**
     * 获取微信应用枚举
     * @param valueName
     * @return
     */
    public static WxAppEnum getWxAppEnum(String valueName){
        Optional<WxAppConfigEnum> optional = Optional.ofNullable(valueOfConfigName(valueName));
        return optional.isPresent()?optional.get().getWxAppEnum():null;
    }
}

配置工厂

@Data
@Component
public class WxAppConfigFactory {

    public static final Map<WxAppEnum,IWxAppBaseConfig> configMap =new HashMap<>();

    @Autowired
    private ApplicationContext applicationContext;

    /**
     * 初始化微信应用配置
     */
    @PostConstruct
    public void init(){
        applicationContext.getBeansOfType(IWxAppBaseConfig.class)
                .entrySet()
                .stream()
                .filter(x-> !ObjectUtil.isNull(WxAppConfigEnum.valueOfConfigName(x.getKey())))
                .forEach(x->configMap.put(WxAppConfigEnum.getWxAppEnum(x.getKey()),x.getValue()));
    }

    /**
     * 获取配置
     * @param configValue
     * @return
     */
    public static IWxAppBaseConfig getConfig(WxAppEnum configValue){
        return configMap.get(configValue);
    }
}

 

工厂模式-企业微信应用配置代码优化

原文:https://www.cnblogs.com/gabriel-y/p/12311866.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!