欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识

大家自己依葫芦画 CAD加密 瓢自己完成就好了

点击: 次  来源:宝鼎软件 时间:2017-08-30

原文出处: 翟永超

请先阅读这2篇文章:

  • 措施员你为什么这么累?
  • 我的编码习惯 – 接口界说
  • 第一篇文章中,我贴了2段代码,第一个是原生态的,第2段是我指定了接口界说类型,利用AOP技能之后最终交付的代码,从15行到一行,本身感觉一下。本日来说说各人存眷的AOP如何实现。

    先说说Controller类型,主要的内容是就是接口界说内里的内容,你只要遵循内里的类型,controller就问题不大,除了这些,尚有别的的几点:

    1. 所有函数返回统一的ResultBean/PageResultBean名目

    原因见我的接口界说这个贴。没有统一名目,AOP无法玩。

    1. ResultBean/PageResultBean是controller专用的,不答允往后传!
    2. Controller做参数名目标转换,不答允把json,map这类工具传到services去,也不答允services返回json、map。

    一般环境下!写过代码都知道,map,json这种名目机动,可是可读性差,假如放业务数据,每次阅读起来都较量坚苦。界说一个bean看着事情量多了,但代码清晰多了。

    1. 参数中一般环境不答允呈现Request,Response这些工具

    主要是可读性问题。一般环境下。

    1. 不需要打印日志

    日志在AOP内里会打印,软件开发,并且我的发起是大部门日志在Services这层打印。

    类型内里大部门是 不要做的项多,要做的较量少,落地较量容易。

    ResultBean界说带泛型,利用了lombok。

    各人本身依葫芦画 CAD加密 瓢本身完成绩好了 

    AOP代码,主要就是打印日志和捕捉异常,异常要区分已知异常和未知异常,个中未知的异常是我们重点存眷的,可以做一些邮件通知啥的,已知异常可以再细分一下,可以差异的异常返回差异的返回码:

    public class ControllerAOP {
      private static final Logger logger = LoggerFactory.getLogger(ControllerAOP.class);
      public Object handlerControllerMethod(ProceedingJoinPoint pjp) {
        long startTime = System.currentTimeMillis();
        ResultBean<?> result;
        try {
          result = (ResultBean<?>) pjp.proceed();
          logger.info(pjp.getSignature() + "use time:" + (System.currentTimeMillis() - startTime));
        } catch (Throwable e) {
          result = handlerException(pjp, e);
        }
        return result;
      }
      private ResultBean<?> handlerException(ProceedingJoinPoint pjp, Throwable e) {
        ResultBean<?> result = new ResultBean();
        // 已知异常
        if (e instanceof CheckException) {
          result.setMsg(e.getLocalizedMessage());
          result.setCode(ResultBean.FAIL);
        } else {
          logger.error(pjp.getSignature() + " error ", e);
          result.setMsg(e.toString());
          result.setCode(ResultBean.FAIL);
         // 未知异常是应该重点存眷的,软件开发,这里可以做其他操纵,如通知邮件,劳务派遣管理系统,单独写到某个文件等等。
        }
        return result;
      }
    }

    AOP设置:(关于用java代码照旧xml设置,这里我倾向于xml设置,因为这个会不按期窜改)

    <!-- aop -->
      <aop:aspectj-autoproxy />
      <beans:bean id="controllerAop" class="xxx.common.aop.ControllerAOP" />
      <aop:config>
        <aop:aspect id="myAop" ref="controllerAop">
          <aop:pointcut id="target"
            expression="execution(public xxx.common.beans.ResultBean *(..))" />
          <aop:around method="handlerControllerMethod" pointcut-ref="target" />
        </aop:aspect>
      </aop:config>

    此刻知道为什么要返回统一的一个ResultBean了:

  • 为了统一名目
  • 为了应用AOP
  • 为了包装异常信息
  • 分页的PageResultBean大同小异,各人本身依葫芦画瓢本身完成绩好了。

    贴一个简朴的controller(左边的箭头暗示AOP拦截了)。请比拟措施员你为什么这么累?内里本来的代码查察,没有比拟就没有伤害。

    各人本身依葫芦画 CAD加密 瓢本身完成绩好了

    最后说一句,先有统一的接口界说类型,然后有AOP实现。先有思想再有技能。技能不是要害,AOP技能也很简朴,这个帖子的要害点不是技能,而是习惯和思想,不要捡了芝麻丢了西瓜。网络上讲技能的贴多,讲习惯、气势气魄的少,这些都是我事情多年的行之有效的履历之谈,望有缘人珍惜。