反射?切面?怎样对公共参数及行为进行封装

  现在都是微服务化访问,某系统访问另一系统时,总有一些公用参数需要处理,另外还需要对访问情况进行日志打印。
  调用的服务是dubbo服务,如何封装这一些公共参数而不是每次调用方法时都做反复的事呢?
三个方法:
  1. 写一个公共方法,在调用rpc方法前和方法后,都进行调用;
    简单直接且易读,且想加就加更灵活。不好处就是每个地方都要重复写这两段公用代码,不简洁。
  2. 使用反射方法,进行调用dubbo方法,在调用前调用后,都进行参数组装,并将日志打印好。
    好处是每次只需调用一个反射封装方法,就能完成所有工作,简单实用。坏处是方法被反射调用后,不直观,无法使用ide的语法检查快速发现潜在问题。
  3. 使用切面进行设值处理。
    好处是代码无侵入,简洁明了。坏处是新来的同学不易理解一些运行原理,不能很好利用切面辅助,另外,切面规则需要保持一致,否则无法实现处理。
来几个实现的例子吧!
使用公共方法:

// 公用封装参数方法,四处调用,当然这里是不完整的封装,可能还需要更复杂的代码侵入 public static void wrapCommonField(Object param) { ThreadlocalVar session = ThreadlocalVar.getVar(); if (null != param && (param instanceof BaseDTO)) { BaseDTO basePara = (BaseDTO) param; if (null != session) { basePara.setIp(session.getIp()); if(session.getUserId() != null) { basePara.setUserId(session.getUserId()); } } } // ... } // 调用,在调用service方法时,先鲁一段该调用代码 public static void main(String[] args) { RpcServiceA serviceA = new RpcServiceA(); Object param = ...; wrapCommonField(param); // ... }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwgpz.html