springboot动态调用实现类方式

 更新时间:2021年11月16日 11:12:31   作者:Gr_lbxx  
这篇文章主要介绍了springboot动态调用实现类方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

springboot动态调用实现类

定义规则的多种类型

/**
 * 数据规则处理类型枚举
 */
public enum RuleType {
    MYRULEBYID1,
    MYRULEBYID2
}

接口

import java.util.List;
import java.util.Map;
 
public interface DataRuleParse {
    /**
     * 获取规则处理的类型
     * @return
     */
      RuleType getRuleType();
 
    /**
     * 根据规则处理类型生成sql
     * @return
     */
   List<String> getSQl( Map<String,Object> paramMap);
}

实现类,规则类型1

package gds.application.masterdata.DataRuleParse; 
import gds.application.common.constants.ConnectorConstants;
import gds.application.common.constants.XmlConfigurationContants;
import gds.application.common.util.ApplicationContextUtil;
import gds.application.masterdata.constants.ConnectDataProcessesConstants;
import gds.application.masterdata.service.impl.BatchExecutionSqlServiceImpl;
import org.springframework.stereotype.Component;  
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
@Component
public class MYRULEBYID1 implements DataRuleParse{   
    @Override
    public RuleType getRuleType() {
        return RuleType.MYRULEBYID1;
    }
 
    @Override
    public List<String> getSQl( Map<String,Object> paramMap) {
       //规则1实现方法
        return null;
    }

实现类,规则类型2

package gds.application.masterdata.DataRuleParse; 
import gds.application.common.constants.ConnectorConstants;
import gds.application.common.constants.XmlConfigurationContants;
import gds.application.common.util.ApplicationContextUtil;
import gds.application.masterdata.constants.ConnectDataProcessesConstants;
import gds.application.masterdata.service.impl.BatchExecutionSqlServiceImpl;
import org.springframework.stereotype.Component;  
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
@Component
public class MYRULEBYID2 implements DataRuleParse{   
    @Override
    public RuleType getRuleType() {
        return RuleType.MYRULEBYID2;
    }
 
    @Override
    public List<String> getSQl( Map<String,Object> paramMap) {
       //规则2实现方法
        return null;
    }

工厂类,调用方法获取具体实现类

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component; 
import java.util.HashMap;
import java.util.Map;
 
/**
 * 规则转换工厂类
 */
@Component
public class DataRuleParseFactory implements ApplicationContextAware {
    private static Map<String, DataRuleParse> dataRuleBeanMap;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException{
        Map<String, DataRuleParse> map = applicationContext.getBeansOfType(DataRuleParse.class);
        dataRuleBeanMap = new HashMap<String, DataRuleParse>();
        map.forEach((key, value) -> dataRuleBeanMap.put(value.getRuleType().toString(), value));
    }
 
    public static <T extends DataRuleParse> T getTrafficMode(String ruleType) {
        return (T)dataRuleBeanMap.get(ruleType);
    }
}

根据参数获取对应的方法,ruleName为MYRULEBYID1或者MYRULEBYID2

  DataRuleParse dataRuleParse= DataRuleParseFactory.getTrafficMode(ruleName);
  List<String> sqlList=dataRuleParse.getSQl(paramMap);

springboot手动获取实现类

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
WebApplicationContext cxt = WebApplicationContextUtils.getWebApplicationContext(sc);
weixinService = (IWeixinService) cxt.getBean("IWeixinService");
qqService = (IQQService) cxt.getBean("IQQService");

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java开发SpringBoot参数校验过程示例教程

    java开发SpringBoot参数校验过程示例教程

    这篇文章主要为大家介绍了SpringBoot如何进行参数校验的过程示例详解教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-10-10
  • Java超详细分析讲解哈希表

    Java超详细分析讲解哈希表

    哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过把关键码映射的位置去寻找存放值的地方,说起来可能感觉有点复杂,我想我举个例子你就会明白了,最典型的的例子就是字典
    2022-06-06
  • 自定义对象作为HashMap的Key问题

    自定义对象作为HashMap的Key问题

    这篇文章主要介绍了自定义对象作为HashMap的Key问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Java实现自定义中文排序的方法机注意事项

    Java实现自定义中文排序的方法机注意事项

    在Java中,中文排序通常涉及到使用Collator类来处理字符串的比较,确保根据汉字的拼音顺序进行排序,本文给大家介绍了Java实现自定义中文排序的方法机注意事项,并有相关的代码示例供大家参考,需要的朋友可以参考下
    2024-10-10
  • Java中使用fastjson设置字段不序列化

    Java中使用fastjson设置字段不序列化

    这篇文章主要介绍了Java中使用fastjson设置字段不序列化,alibaba的fasetjson可以设置字段不序列化,使用@JSONField注解的serialize属性,该属性默认是可以序列化的,设置成false就表示不可序列化,需要的朋友可以参考下
    2023-12-12
  • Java如何替换RequestBody和RequestParam参数的属性

    Java如何替换RequestBody和RequestParam参数的属性

    近期由于接手的老项目中存在所有接口中新增一个加密串来给接口做一个加密效果,所以就研究了一下Http请求链路,发现可以通过 javax.servlet.Filter去实现,这篇文章主要介绍了Java替换RequestBody和RequestParam参数的属性,需要的朋友可以参考下
    2023-10-10
  • JDBC自定义连接池过程详解

    JDBC自定义连接池过程详解

    这篇文章主要介绍了JDBC自定义连接池过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • java遍历读取xml文件内容

    java遍历读取xml文件内容

    这篇文章主要为大家介绍了java遍历读取xml文件内容,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • java能写爬虫程序吗

    java能写爬虫程序吗

    在本篇文章里小编给大家整理的是一篇关于java是否能写爬虫程序的一篇文章,对此有兴趣的朋友们可以学习下。
    2021-01-01
  • Java组件javabean用户登录实例详解

    Java组件javabean用户登录实例详解

    这篇文章主要为大家详细介绍了Java组件javabean用户登录实例,内容有用户登录,注册和退出等,感兴趣的小伙伴们可以参考一下
    2016-05-05

最新评论