Magician-Route 发布啦,去除反射,性能得到有效提升 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Joker123456789
V2EX    Java

Magician-Route 发布啦,去除反射,性能得到有效提升

  •  
  •   Joker123456789 Nov 21, 2022 2086 views
    This topic created in 1252 days ago, the information mentioned may be changed or developed.

    Magician-Route 是 Magician 的官方 web 组件,由 Magician-Web 发展而来的新项目,主要是去掉了里面的反射,牺牲了一点易用性,将侧重点放在了性能上,两者的区别主要在于路由和拦截器的创建方式上。

    Magician-Web 依然会继续维护,如果大家对反射的性能不是特别抗拒,而且更喜欢 Magician-Web 的风格,大可放心使用。

    创建路由

    由注解的形式改成了 传参的形式,每一次的请求都不再需要通过反射来执行了路由了,性能得到了有效提升

    • 这样的类可以创建多个,根据你的需求 将路由分开创建
    • 每个路由内部,如果没有特别的需要 就不需要加 try-catch ,框架内部做了处理,一旦发生异常,会将异常信息以 json 的形式响应给客户端
    • 直接返回需要响应的对象,框架会自动转成 json 并返回给客户端,你也可以采用如下示例中 “Magician 的原生响应方式” 将数据返回给客户端,具体可以看 Magician 文档的《响应参数》
    @Route public class DemoRoute implements MagicianInitRoute { @Override public void initRoute(MagicianRouteCreate routeCreate) { routeCreate.get("/demo/getForm", request -> { return "{"msg":"hello login"}"; }); // Magician 的原生响应方式 routeCreate.get("/demo/getForm2", request -> { request.getResponse().sendJson("{"msg":"hello login"}"); return null; }); routeCreate.post("/demo/json", request -> { DemoResponseVo demoRespOnseVo= new DemoResponseVo(); demoResponseVo.setName("Beerus"); return demoResponseVo; }); } } 

    将参数转化为实体对象

    如果你想让实体类顺利的接收到参数,并且让参数验证生效,那么必须做如下步骤, 这种方式 底层是用的反射,如果你无法接受反射的性能,那么可以不用这种方式,选择权在你自己

    • 只转化
    routeCreate.get("/demo/getForm", request -> { DemoVO demoVO = ConversionUtil.conversion(request, DemoVO.class); return "{"msg":"hello login"}"; }); 
    • 转化 + 参数验证

    如果验证失败,conversionAndVerification 方法会抛出一个异常,这个异常会自动被响应给客户端,不需要开发者处理

    routeCreate.get("/demo/getForm", request -> { DemoVO demoVO = ConversionUtil.conversionAndVerification(request, DemoVO.class); return "{"msg":"hello login"}"; }); 

    如果你想获取到验证失败的提示信息 自己处理,可以用这种方式

    routeCreate.get("/demo/getForm", request -> { try { DemoVO demoVO = ConversionUtil.conversionAndVerification(request, DemoVO.class); } catch(VerificationException e){ // 这个就是 验证失败的提示信息 String msg = e.getMessage(); } return "{"msg":"hello login"}"; }); 

    创建拦截器

    跟路由一样,这种类也可以创建多个,根据你的需求 分开创建拦截器

    • 第一个参数为拦截规则,全部拦截 配置 * 即可,否则的话,必须以 / 开头
    • 如果拦截器顺利放行的话,返回 SUCCESS 就好了,如果不给通过,那么直接返回 错误提示信息(返回对象会自定转成 json )
    @Interceptor public class DemoInter implements MagicianInitInterceptor { @Override public void initInterceptor(MagicianInterceptorCreate interceptorCreate) { interceptorCreate.addInterceptor("/demo/*", new MagicianInterceptor() { @Override public Object before(MagicianRequest magicianRequest) { System.out.println("进入了拦截器"); return SUCCESS; } @Override public Object after(MagicianRequest magicianRequest, Object o) { return SUCCESS; } }); interceptorCreate.addInterceptor("/*/form", new MagicianInterceptor() { @Override public Object before(MagicianRequest magicianRequest) { System.out.println("进入了拦截器 2"); return SUCCESS; } @Override public Object after(MagicianRequest magicianRequest, Object o) { return SUCCESS; } }); } } 

    可以访问官网了解更多:https://magician-io.com

    2 replies    2022-11-22 15:00:12 +08:00
    bthulu
        1
    bthulu  
       Nov 22, 2022
    看了代码才知道原来是 java 的, java 不是都 spring 一把梭么, 谁会来用你这个.
    你整个 js 的说不定用的人还多些, 就前端最喜欢新玩意
    Joker123456789
        2
    Joker123456789  
    OP
       Nov 22, 2022
    @bthulu

    谢谢你的建议,

    我只管好好开发,其他的交给天意。
    About     Help     Advertise     Blog     API     FAQ     Solana     841 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 21:34 PVG 05:34 LAX 14:34 JFK 17:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86