springboot动态调用实现类方式

目录
  • springboot动态调用实现类
  • 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");

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

(0)

相关推荐

  • Springboot实现根据条件切换注入不同实现类的示例代码

    最近有个一需求需要根据外界环境的属性(操作系统 || yml属性 || 其他bean的状态) 来实现启动时注入两套不同的实现类, 实现切换. 实现启动时条件注入分2步: 第一步 使用@Conditional(参数为 True false条件实现类 需要你自己实现)注解 @Conditional(RabbitMqCondition.class) public class RabbitmqSMSMsgServiceImpl extends RabbitmqBasicMsgService { // @

  • Spring动态加载bean后调用实现方法解析

    前言 在使用Spring的过程中,我们有时候并不想通过xml的方式进行bean的注入,希望在不改变原有的程序结构的基础上添加我们需要的bean,这个时候我们可以利用Spring的spring-beans的jar包里提供的BeanFactoryPostProcessor接口类,通过实现这个接口类,我们可以动态的加载所需要的bean,特别是在引入已经打包在jar里面的程序而没有办法做出修改的情况下,这个接口就为我们提供了及其方便的入口. 因为我是在其他项目的基础上测试的这个接口,所以引入的jar有其

  • 使用Springboot根据配置文件动态注入接口实现类

    Springboot根据配置文件动态注入接口实现类 需求 最近在做一个Springboot项目,需要面向不同需求的客户,但是为了方便管理分支,需要将不同客户的需求都写到同一套代码中,根据不同客户实例化对应的实现类. 实现 为了尽量不修改代码,少做不必要的逻辑判断,我们考虑为不同客户写不同的Service,然后根据配置参数实例化对应的Service.这样就遇到了需要根据配置文件实现不同类的需求. 针对这一需求大致有两种实现方式.但是针对我的需求,能用的只有第二种,但还是想将第一种一起总结一下. 两

  • springboot动态调用实现类方式

    目录 springboot动态调用实现类 springboot手动获取实现类 springboot动态调用实现类 定义规则的多种类型 /** * 数据规则处理类型枚举 */ public enum RuleType { MYRULEBYID1, MYRULEBYID2 } 接口 import java.util.List; import java.util.Map; public interface DataRuleParse { /** * 获取规则处理的类型 * @return */ Rul

  • 一文带你轻松学会Go语言动态调用函数

    目录 前言 JavaScript 动态调用函数 Go 中动态调用方法 前言 经常在开发的时候会遇到这样的场景,几个模块的都有相同的方法,但会因为不同的类型的需要调用不同模块的方法.使用一个 switch 可以很方便的解决问题.但是当你遇到的场景是几个模块的方法都是需要的执行,同时它需要在不同的配置下执行相对应的方法. func m1(){} func m2(){} func m3(){} c := cron.New(cron.WithSeconds()) c.addFunc(config1,fu

  • springboot如何通过不同的策略动态调用不同的实现类

    目录 通过不同的策略动态调用不同的实现类 代码演示 可能用到的场景举例 spring中动态选择实现类 方案一 方案二 通过不同的策略动态调用不同的实现类 经常遇到这样的一个需求,前端传的实体类型相同,后端需要根据实体类中的某一个字符串,动态地调用某一个类的方法. 在SpringBoot中,我们可以理解成,一个Controller接口对应多个ServiceImpl,使用这种方式,如果后期需要添加一个功能,仅仅创建一个ServiceImpl就可以满足需求,而不用再额外创建一个Controller接口

  • SpringBoot动态Feign服务调用详解

    目录 1.Feign传统方式的不足 2.动态Feign 2.1.服务生产者 2.2.动态Feign 2.3.服务消费者 3.总结 1.Feign传统方式的不足 ①.在微服务架构中,当我们使用Feign传统方式进行服务调用的时候,需要在每个服务消费者中添加FeignClient接口,编写对应的方法,而且当服务生产者Handler新增方法之后,服务消费者也要在FeignClient接口中添加方法,这样的话,会有些累赘. 那么能不能在调用服务提供者方法的时候,传入生产者服务名称的动态生成FeignCl

  • Java 使用反射调用jar包中的类方式

    下面讲展示的是从image.jar包中调用image.Buddy类的方法. public class Main { public static void main(String[] args) { try { // 两种方式都可以 URL url = new File("/Users/wuchen/Documents/IntelliJIDEA/Applet/out/production/Applet/image.jar").toURI().toURL(); // URL url = n

  • Springboot自带定时任务实现动态配置Cron参数方式

    目录 Springboot自带定时任务实现动态配置Cron参数 SpringBoot定时任务的四种实现方式(主要) spring动态配置cron表达式,不需要停服 SchedulingConfigurer接口实现动态加载cron表达式 Springboot自带定时任务实现动态配置Cron参数 同学们,我今天分享一下SpringBoot动态配置Cron参数.场景是这样子的:后台管理界面对定时任务进行管理,可动态修改执行时间,然后保存入库,每次任务执行前从库里查询时间,以达到动态修改Cron参数的效

  • Java动态调用类中方法代码

    在Java中,调用类的方法有两种方式:对于静态方法可以直接使用类名调用,对于非静态方法必须使用类的对象调用.反射机制提供了比较另类的调用方式,可以根据需要指定要调用的方法,而不必在编程时确定.调用的方法不仅限于public的,还可以是private的.编写程序,使用反射机制调用Math类的静态方法sin()和非静态方法equals(). 思路如下:使用Math.class.getDeclaredMethod("sin", Double.TYPE);访问指定的方法,其中"sin

  • Struts2学习笔记(3)-DMI动态调用方式

    什么是DMI?DMI即所谓的动态方法调用. Action在执行的时候并不一定要执行execute方法,可以在配置文件中配置Action的时候用method=来指定执行哪个方法,也可以在url地址中动态指定(动态方法调用DMI). 第一种方式,在struts.xml中对Action添加method: 复制代码 代码如下: <struts>     <constant name="struts.devMode" value="true" />  

  • springboot实现在工具类(util)中调用注入service层方法

    一.新建BeanUtil类 import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeansException; import org.springframework.beans.factory.DisposableBean; import org.springframework.context.ApplicationContext; import org.springframework.context.Applic

  • SpringBoot 动态配置Profile环境的方式

    下面的例子是通过修改开发环境和生产环境的动态配置的端口号的示例: 开发环境端口号是 8081 生产环境端口号是 8082 springboot的配置方式 springboot的配置有两种:properties和yaml或yml properties方式配置 1.在application.properties配置环境 创建两个application-xx.properties 一个application-dev.properties #开发环境 一个application-pro.properti

随机推荐