java本服务如何调用本服务接口

 更新时间:2025年04月21日 08:47:40   作者:little_fairy66  
这篇文章主要介绍了java本服务如何调用本服务接口问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

java本服务调用本服务Feign接口

  • 1.获取所有@RequestMaping注解修饰的方法
  • 2.构建目标url的RequestMappingInfo对象
  • 3.获取目标url的Method对象
  • 4.执行

1.获取所有@RequestMaping注解修饰的方法

    Map<RequestMappingInfo, HandlerMethod> handlerMethods =
    						requestMappingHandlerMapping.getHandlerMethods();

获取结果类型为Map<RequestMappingInfo, HandlerMethod> 其中RequestMappingInfo为请求映射信息(包含请求类型,url)

public final class RequestMappingInfo implements RequestCondition<RequestMappingInfo> {
  	// 这个映射对象的名字
  	@Nullable
	private final String name;
	// 此RequestMappingInfo对象的URL模式
	@Nullable
	private final PathPatternsRequestCondition pathPatternsCondition;
	// 此RequestMappingInfo的HTTP请求方法;
	@Nullable
	private final PatternsRequestCondition patternsCondition;
	
	private final RequestMethodsRequestCondition methodsCondition;
	// 此RequestMappingInfo的“参数”条件
	private final ParamsRequestCondition paramsCondition;
	// 此RequestMappingInfo的“headers”条件;
	private final HeadersRequestCondition headersCondition;

	private final ConsumesRequestCondition consumesCondition;

	private final ProducesRequestCondition producesCondition;

	private final RequestConditionHolder customConditionHolder;

	private final int hashCode;

	private final BuilderConfiguration options;
}

HandlerMethod为该bean中对应方法的信息(包括bean的名称,入参类型,返回数据,方法名称等),源码及注释

public class HandlerMethod {
 
    // bean的名称,可通俗理解为类名
	private final Object bean;

	@Nullable
	private final BeanFactory beanFactory;

	@Nullable
	private final MessageSource messageSource;
	
	// 方法所属类
	private final Class<?> beanType;
    // 对应方法
	private final Method method;
	// 被桥接的方法,如果method是原生的,这个属性的值就是method
	private final Method bridgedMethod;
	// 封装方法参数的类实例,一个MethodParameter就是一个参数
	private final MethodParameter[] parameters;

	@Nullable
	private HttpStatus responseStatus;

	@Nullable
	private String responseStatusReason;

	@Nullable
	private HandlerMethod resolvedFromHandlerMethod;

	@Nullable
	private volatile List<Annotation[][]> interfaceParameterAnnotations;

	private final String description;

}

2.构建目标url的RequestMappingInfo对象

RequestMethod requestMethod = RequestMethod.GET ;
 RequestMappingInfo requestMappingInfo = 
 					RequestMappingInfo.paths("/export/getInfo").methods(requestMethod).build();

3.获取目标url的Method对象

Method method = handlerMethods.get(requestMappingInfo).getMethod();

4.执行

注意被执行的一定是可以进行实例化的类,不可以为接口或抽象类

method.invoke(method.getDeclaringClass());
// 若存在参数,则使用以下方案,其中param为入参
method.invoke(method.getDeclaringClass(), param);

总结

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

相关文章

  • 理解Java的序列化与反序列化

    理解Java的序列化与反序列化

    这篇文章主要为大家详细介绍了Java的序列化与反序列化,序列化是一种对象持久化的手段。普遍应用在网络传输、RMI等场景中。本文通过分析ArrayList的序列化来介绍Java序列化的相关内容,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • Spring Boot Web应用开发 CORS 跨域请求支持

    Spring Boot Web应用开发 CORS 跨域请求支持

    本篇文章主要介绍了Spring Boot Web应用开发 CORS 跨域请求支持,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 详解Java如何优雅的使用装饰器模式

    详解Java如何优雅的使用装饰器模式

    装饰器设计模式大家肯定都听说过,但是有没有使用过呢,今天本君就跟大家分享一下装饰器模式应该如何使用,感兴趣的小伙伴可以学习一下
    2022-09-09
  • Java设计模式之开闭原则精解

    Java设计模式之开闭原则精解

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。本篇介绍设计模式七大原则之一的开闭原则
    2022-02-02
  • org.springframework.dao.OptimisticLockingFailureException乐观锁失败的解决方法

    org.springframework.dao.OptimisticLockingFailureException乐观锁

    本文主要介绍了org.springframework.dao.OptimisticLockingFailureException乐观锁失败的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • Java轻松提取PDF表格数据并转换为CSV

    Java轻松提取PDF表格数据并转换为CSV

    在日常工作中,你是否曾为从 PDF 中手动复制粘贴表格数据而抓狂,下面小编就和大家详细介绍一下如何使用Java轻松高效地将提取的PDF 表格数据转换为CSV吧
    2025-09-09
  • @Transactional解读(作用、失效场景与解决方式)

    @Transactional解读(作用、失效场景与解决方式)

    这篇文章主要介绍了关于@Transactional作用、失效场景与解决方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 解决idea找不到setting.xml文件的问题

    解决idea找不到setting.xml文件的问题

    这篇文章主要介绍了解决idea找不到setting.xml文件的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • springboot使用com.github.binarywang包实现微信网页上的支付和退款

    springboot使用com.github.binarywang包实现微信网页上的支付和退款

    最近做项目需要实现在pc端需要实现微信的支付,本文主要介绍了springboot使用com.github.binarywang包实现微信网页上的支付和退款,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • Java8接口的默认方法

    Java8接口的默认方法

    这篇文章主要为大家介绍了Java8接口的默认方法,还为大家默认方法的多重继承,感兴趣的朋友可以参考一下
    2016-01-01

最新评论