java反射中getType_java中通过反射获取方法并且调用(getMethod和invoke深入)实践

本文探讨了如何利用Java反射动态调用方法,通过`getMethod`和`invoke`实现函数配置和执行。文章介绍了`ConvertFunction`类作为业务处理容器,配置在数据库中的函数组合,以及通用的反射调用函数`Utils`类,用于查找和执行配置的函数。通过这种方式,可以减少大量单独的Java文件,提高代码复用,但可能导致单个类文件增大。
摘要由CSDN通过智能技术生成

为了支持业务的快速变更,往往采用可配置的方式,将业务逻辑的处理部分配置在数据库中或者XMl文件里。配置什么,如何配置才更灵活,That's a problem.

以数据库配置为例(xml相同),在数据库中可以配置上java包名+类名,一个类只处理一个功能(符合设计模式中的单一性原则),这样只需要把数据库中的类名读出来,Class.forname("xxxx").newInstance()即可实现,这种方式简单,但会产生大量.java文件,管理一下还是挺麻烦的,并且每个.java文件处理一个单一的功能(即便功能很简单,也会生成一个.java文件),个人觉得有点浪费,并且每个.java文件肯定会有部分重复的地方(如属性变量等),当然如果不嫌烦的话,可以将功能的抽象出来,每写个.java都看下是否需要抽象,无穷尽也!本文讨论的不是这种方式配置,采用配置函数的方式,并且运行配置的函数,来达到相同的目的。

1、先看下我们拥有的函数:

package com.java.reflect;

public class ConvertFunction implements IFunction {

public final int PRE_ARGS_NUM = 2; //默认参数个数,根据需要自行修改

public final Class>[] PRE_ARGS_TYPE = new Class>[] {String.class,String.class}; //默认的参数的类型,根据需要自行修改

public int convert_if_exist(String name,String value,String field1,String field2){ //可修改成自个的业务逻辑

System.out.println("name = " + name);

System.out.println("value = " + value);

System.out.println(field1 + " " + field2);

return 0;

}

public int convert_if_exist(String name,String value,String field1,String field2,String field3){//可修改成自己的业务逻辑

System.out.println("name = " + name);

System.out.println("value = " + value);

System.out.println(field1 + " " + field2 + " " + field3);

return 0;

}//要添加函数,均在这个类中添加并配置进配置文件中即可

}

package com.java.reflect;

public interface IFunction {

}

2、在数据库中的配置(可以改成其他方式)

e24bc119c586d45359f4c982ea0cef4c.png

admin

可以看到数据库中配置了三条记录,仔细点会发现,其实就是1中的两个函数,只是组合了罢了。而且第一条和第二条记录也只是参数不同!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值