经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Spring » 查看文章
springboot动态调用实现类方式
来源:jb51  时间:2021/11/16 13:13:15  对本文有异议

springboot动态调用实现类

定义规则的多种类型

  1. /**
  2. * 数据规则处理类型枚举
  3. */
  4. public enum RuleType {
  5. MYRULEBYID1
  6. MYRULEBYID2
  7. }

接口

  1. import java.util.List;
  2. import java.util.Map;
  3. public interface DataRuleParse {
  4. /**
  5. * 获取规则处理的类型
  6. * @return
  7. */
  8. RuleType getRuleType();
  9. /**
  10. * 根据规则处理类型生成sql
  11. * @return
  12. */
  13. List<String> getSQl( Map<String,Object> paramMap);
  14. }

实现类,规则类型1

  1. package gds.application.masterdata.DataRuleParse;
  2. import gds.application.common.constants.ConnectorConstants;
  3. import gds.application.common.constants.XmlConfigurationContants;
  4. import gds.application.common.util.ApplicationContextUtil;
  5. import gds.application.masterdata.constants.ConnectDataProcessesConstants;
  6. import gds.application.masterdata.service.impl.BatchExecutionSqlServiceImpl;
  7. import org.springframework.stereotype.Component;
  8. import java.util.ArrayList;
  9. import java.util.HashMap;
  10. import java.util.List;
  11. import java.util.Map;
  12. @Component
  13. public class MYRULEBYID1 implements DataRuleParse{
  14. @Override
  15. public RuleType getRuleType() {
  16. return RuleType.MYRULEBYID1;
  17. }
  18. @Override
  19. public List<String> getSQl( Map<String,Object> paramMap) {
  20. //规则1实现方法
  21. return null;
  22. }

实现类,规则类型2

  1. package gds.application.masterdata.DataRuleParse;
  2. import gds.application.common.constants.ConnectorConstants;
  3. import gds.application.common.constants.XmlConfigurationContants;
  4. import gds.application.common.util.ApplicationContextUtil;
  5. import gds.application.masterdata.constants.ConnectDataProcessesConstants;
  6. import gds.application.masterdata.service.impl.BatchExecutionSqlServiceImpl;
  7. import org.springframework.stereotype.Component;
  8. import java.util.ArrayList;
  9. import java.util.HashMap;
  10. import java.util.List;
  11. import java.util.Map;
  12. @Component
  13. public class MYRULEBYID2 implements DataRuleParse{
  14. @Override
  15. public RuleType getRuleType() {
  16. return RuleType.MYRULEBYID2;
  17. }
  18. @Override
  19. public List<String> getSQl( Map<String,Object> paramMap) {
  20. //规则2实现方法
  21. return null;
  22. }

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

  1. import org.springframework.beans.BeansException;
  2. import org.springframework.context.ApplicationContext;
  3. import org.springframework.context.ApplicationContextAware;
  4. import org.springframework.stereotype.Component;
  5. import java.util.HashMap;
  6. import java.util.Map;
  7. /**
  8. * 规则转换工厂类
  9. */
  10. @Component
  11. public class DataRuleParseFactory implements ApplicationContextAware {
  12. private static Map<String, DataRuleParse> dataRuleBeanMap;
  13. @Override
  14. public void setApplicationContext(ApplicationContext applicationContext) throws BeansException{
  15. Map<String, DataRuleParse> map = applicationContext.getBeansOfType(DataRuleParse.class);
  16. dataRuleBeanMap = new HashMap<String, DataRuleParse>();
  17. map.forEach((key, value) -> dataRuleBeanMap.put(value.getRuleType().toString(), value));
  18. }
  19. public static <T extends DataRuleParse> T getTrafficMode(String ruleType) {
  20. return (T)dataRuleBeanMap.get(ruleType);
  21. }
  22. }

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

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

springboot手动获取实现类

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

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号