请先阅读这2篇文章:
第一篇文章中,我贴了2段代码,第一个是原生态的,第2段是我指定了接口界说类型,利用AOP技能之后最终交付的代码,从15行到一行,本身感觉一下。本日来说说各人存眷的AOP如何实现。
先说说Controller类型,主要的内容是就是接口界说内里的内容,你只要遵循内里的类型,controller就问题不大,除了这些,尚有别的的几点:
原因见我的接口界说这个贴。没有统一名目,AOP无法玩。
一般环境下!写过代码都知道,map,json这种名目机动,可是可读性差,假如放业务数据,每次阅读起来都较量坚苦。界说一个bean看着事情量多了,但代码清晰多了。
主要是可读性问题。一般环境下。
日志在AOP内里会打印,软件开发,并且我的发起是大部门日志在Services这层打印。
类型内里大部门是 不要做的项多,要做的较量少,落地较量容易。
ResultBean界说带泛型,利用了lombok。
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了:
分页的PageResultBean大同小异,各人本身依葫芦画瓢本身完成绩好了。
贴一个简朴的controller(左边的箭头暗示AOP拦截了)。请比拟措施员你为什么这么累?内里本来的代码查察,没有比拟就没有伤害。
最后说一句,先有统一的接口界说类型,然后有AOP实现。先有思想再有技能。技能不是要害,AOP技能也很简朴,这个帖子的要害点不是技能,而是习惯和思想,不要捡了芝麻丢了西瓜。网络上讲技能的贴多,讲习惯、气势气魄的少,这些都是我事情多年的行之有效的履历之谈,望有缘人珍惜。