在springCloud微服务中添加一个迷你struts实现服务自动转发

本文介绍了如何在SpringCloud微服务环境中,通过自定义注解和过滤器实现服务自动转发,避免在每个服务中重复编写controller。文中详细讲解了实现过程,包括定义注解、获取Spring上下文、添加核心过滤器和转发控制器,并提供了具体的使用方法。此方法不受SpringCloud版本限制,适用于Java 17、SpringBoot 2.6.2和SpringCloud 2021.0.0。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在分布式模式下,微服务的跨服务调用,需要在每个服务中实现controller层,比较麻烦,最好可以把service层的方法直接映射到controller。

有个叫leecho的大佬捣鼓出一个叫spring-cloud-feign-proxy的微服务动态代理框架,可惜3年多没更新了,目前的springboot版本已经没法用了,更何况最新的springboot3版本了。

下面分享一个我日常使用的方法,不受springcloud版本限制,比较灵活。

java版本:17

springboot版本:2.6.2

springcloud版本:2021.0.0


以一个小型分布式系统为例,看下代理模块的结构

        


先定义2个注解

/**
 * 
 * @author 万剑魔君
 * 定义需要提供服务的类
 */
@Documented
@Target(value = { ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface FeignProxy {
	String value() default "";

	//是否自动扫描类中的方法
	boolean autoScan() default true;
}
/**
 * 
 * @author 万剑魔君
 * 定义方法上的请求路径
 */
@Documented
@Target(value = { ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface ProxyPath {
	String value() default "";

	//开启自动扫描时,是否忽略该方法
	boolean ignore() default false;
}

增加一个组件,用于获取spirng上下文

@Component
public class SpringContext implements ApplicationContextAware {

	private ApplicationContext applicationContext;

	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		this.applicationContext = applicationContext;
	}

	public ApplicationContext getApplicationContext() {
		return applicationContext;
	}

	public Object getBean(String name) {
		return getApplicationContext().getBean(name);
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值