日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

100行java电路程序_easyopen原理解析——不到100行代码实现一个最精简的easyopen

發布時間:2025/4/16 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 100行java电路程序_easyopen原理解析——不到100行代码实现一个最精简的easyopen 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

easyopen的核心代碼非常簡單,底層是調用method.invoke()方法實現的。最精簡的代碼如下:

import java.lang.annotation.Documented;

import java.lang.annotation.Retention;

import java.lang.annotation.Target;

import java.lang.reflect.Method;

import java.util.Map;

import java.util.concurrent.ConcurrentHashMap;

import static java.lang.annotation.ElementType.METHOD;

import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**

* 迷你版easyopen

*

* @author tanghc

*/

public class MiniEasyopen {

@Documented

@Retention(RUNTIME)

@Target(METHOD)

@interface Api {

String name() default "";

}

static class ApiInfo {

private Object handler;

private Method method;

public ApiInfo(Object handler, Method method) {

this.handler = handler;

this.method = method;

}

}

// 業務類

static class GoodsService {

// 獲取商品接口

@Api(name = "goods.get")

public String getGoods(String param) {

return "your param is " + param;

}

}

// 存放接口信息的地方

Map map = new ConcurrentHashMap();

// 注冊接口

public void regist() {

// 找到bean對象,可以從spring容器中獲取

Object[] beans = {new GoodsService()};

for (Object bean : beans) {

Class> serviceClass = bean.getClass();

Method[] methods = serviceClass.getMethods();

for (Method method : methods) {

// 找到注解方法

Api api = method.getAnnotation(Api.class);

if (api != null) {

System.out.println(String.format("【注冊接口%s,%s】", api.name(), method.toString()));

map.put(api.name(), new ApiInfo(bean, method));

}

}

}

}

// 調用接口

public Object invoke(String name, String param) throws Exception {

// 根據方法名找到對應的接口信息

ApiInfo apiInfo = map.get(name);

if (apiInfo == null) {

throw new IllegalAccessException("調用不存在的服務" + name);

}

Method method = apiInfo.method;

Object handler = apiInfo.handler;

return method.invoke(handler, param);

}

public static void main(String[] args) throws Exception {

// 服務啟動

MiniEasyopen miniEasyopen = new MiniEasyopen();

// 注冊接口

miniEasyopen.regist();

// 請求名,請求參數,假設已經從request中解析出來

String name = "goods.get";

String param = "iphone";

// 方法調用

Object result = miniEasyopen.invoke(name, param);

System.out.println("返回結果:" + result);

}

}

從main方法開始看,服務啟動做了注冊接口操作,即找到被@Api標記的方法,然后保存這個方法的信息。

調用接口時,根據接口名找到方法信息,然后invoke一下,返回結果。

這個最基本的骨架搭建完之后,可以進行一些額外則操作,比如簽名驗證、攔截器、方法結果處理操作。

easyopen就是在此基礎上逐漸完善起來的。

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的100行java电路程序_easyopen原理解析——不到100行代码实现一个最精简的easyopen的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。