反射feign接口,调用feign的方法

主要是使用了spring的一个反射工具类ReflectionUtils

废话不多说,直接上代码
Fegin接口如下

@FeignClient("sys-service") 
public interface SysFeignClient{

    @GetMapping("findDeptList")
    String findDeptList();

	@PostMapping({"/findUserByOpNo"})
    String findUserByOpNo(@RequestParam("opNo") String opNo);

核心代码

import org.springframework.util.ReflectionUtils;

String feginClass = "cn.mmy.feign.client.SysFeignClient";
String methodName = "findDeptList";
/*通过Class对象来获取对象中的方指定法
*第一个参数是class对象,第二个参数是方法名
*第三个参数是可变参数(根据需求可传可不传),需要传入参数的类型class对象(eg:String.class)
*/
Method method = ReflectionUtils.findMethod(SpringUtil.getBean(feginClass).getClass(),methodName);
/*执行方法
*第一个参数是Method 对象,第二个参数是对象
*第三个参数是可变参数(根据需求可传可不传),需要传入调用方法的参数值
*/
Object result = ReflectionUtils.invokeMethod(method,SpringUtil.getBean(feginClass));
System.out.println("**********--------"+result);

SpringUtil如下:(在项目启动时会加载)

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component
public class SpringUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if(SpringUtil.applicationContext == null) {
            SpringUtil.applicationContext = applicationContext;
        }
        System.out.println("---------------------------------------------------------------------");

        System.out.println("========ApplicationContext配置成功,在普通类可以通过调用SpringUtils.getAppContext()获取applicationContext对象,applicationContext="+SpringUtil.applicationContext+"========");

        System.out.println("---------------------------------------------------------------------");
    }

    //获取applicationContext
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    //通过name获取 Bean.
    public static Object getBean(String name){
        return getApplicationContext().getBean(name);
    }

    //通过class获取Bean.
    public static <T> T getBean(Class<T> clazz){
        return getApplicationContext().getBean(clazz);
    }

    //通过name,以及Clazz返回指定的Bean
    public static <T> T getBean(String name,Class<T> clazz){
        return getApplicationContext().getBean(name, clazz);
    }
}
  • 2
    点赞
  • 7
    收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:精致技术 设计师:CSDN官方博客 返回首页
评论 8

打赏作者

阿波罗AP

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值