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

这篇博客展示了如何利用Spring的ReflectionUtils工具类动态调用FeignClient接口的方法,例如`SysFeignClient`中的`findDeptList`和`findUserByOpNo`。首先定义了Fegin接口,然后在核心代码中通过反射获取并执行指定方法,最后通过SpringUtil获取ApplicationContext并得到Bean来实现调用。

主要是使用了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);
    }
}
Java后端可以使用Feign来进行远程服务调用Feign是一个声明式的Web服务客户端,它使得编写Web服务客户端变得更加简单。通过使用Feign,我们可以像调用本地方法一样调用远程服务。 Feign的使用步骤如下: 1. 在pom.xml文件中添加Feign的依赖。可以通过引用中提供的博客文章来获取更详细的信息和使用示例。 2. 创建一个接口,使用@FeignClient注解指定要调用的远程服务的名称。 3. 在接口中定义需要调用的远程服务的方法,使用@GetMapping、@PostMapping等注解来指定请求的路径和方法类型,并定义方法的参数和返回值类型。 4. 在应用程序中使用@Autowired注解将Feign接口注入到需要进行远程调用的类中。 5. 调用Feign接口中定义的方法来实现对远程服务的调用。 引用中提到的反射机制可以获取private成员的值,这可以为Feign调用提供更灵活的方式。通过反射机制,我们可以获取和设置私有成员的值,以便在Feign调用中使用。具体的实现方法可以参考引用中提供的书籍。 另外,引用中提到了Java中的String不可变性。这意味着一旦创建了一个String对象,它的值就不能被修改。这种不可变性带来了一些好处,比如线程安全、缓存等。在使用Feign调用时,我们可以安全地传递和处理String参数或返回值,而不必担心被修改。 综上所述,Java后端可以使用Feign来进行远程服务调用,并且可以通过反射机制来获取private成员的值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Java后端真实面试题大全(有详细答案)--高频/真题](https://blog.youkuaiyun.com/feiying0canglang/article/details/121219272)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值