一、定义一个PointCut切入点:
注解:@PointCut表示切入点,value表示切入点的做用范围 前端
二、定义一个Aspect切面:
注解:@Aspect 表示声明一个切面;
@Before,前置加强,方法执行前调用
@Around,环绕加强:方法正常执行先后调用
@AfterReturning,后置加强:方法正常退出时执行
@AfterThrowing,异常抛出加强:方法抛异常时执行
@After,final加强:无论是抛出异常或者正常退出都会执行
测试
在@Around标注的方法中,proceed()方法必须写,proceed()方法将会调用url触发的controller层的方法。url
针对异常处理,结果返回前端,能够在@AfterThrowing注解标记的方法中调用处理结果,返回前端;如图中的writeContent()方法。
其中features参数为Json格式化时,须要保留的格式参数。
综上,在@Around注解标记的方法中,也能够调用writeContent()方法来返回正确的数据给前端。
即:在注解@AfterThrowing、@Around处,都调用writeContent()来处理正常结果,或者异常结果给前端。 则至关于将controller层给前端的数据处理、异常处理、日志处理等,都交给AOP来处理,而且只需写一次,则可供全部的controller层代码共用,不再用在每一个controller中、每一个method中写重复的数据处理、异常处理、日志处理等信息。
三、controller测试
此为controller的测试代码。UserEntity类为本身定义的一个实体类。
四、正常状况运行结果:
五、异常状况运行结果:
总结:
利用AOP来处理,让开发只关注业务逻辑,不用再重复每次url请求的数据处理、异常处理、try catch、log日志。
以为写得好,给一个赞哇!谢谢!