Spring中AOP,@Aspect、@Pointcut优化冗余代码,不用在controller写重复代码了。

2,055 阅读2分钟

1、定义一个PointCut切入点:

  注解:@PointCut表示切入点,value表示切入点的作用范围

2、定义一个Aspect切面:

  注解:@Aspect 表示声明一个切面;
  @Before,前置增强,方法执行前调用
  @Around,环绕增强:方法正常执行前后调用
  @AfterReturning,后置增强:方法正常退出时执行
  @AfterThrowing,异常抛出增强:方法抛异常时执行
  @After,final增强:不管是抛出异常或者正常退出都会执行

    在@Around标注的方法中,proceed()方法必须写,proceed()方法将会调用url触发的controller层的方法。

    针对异常处理,结果返回前端,可以在@AfterThrowing注解标记的方法中调用处理结果,返回前端;如图中的writeContent()方法。

  其中features参数为Json格式化时,需要保留的格式参数。

  综上,在@Around注解标记的方法中,也可以调用writeContent()方法来返回正确的数据给前端。 即:在注解@AfterThrowing、@Around处,都调用writeContent()来处理正常结果,或者异常结果给前端。 则相当于将controller层给前端的数据处理、异常处理、日志处理等,都交给AOP来处理,并且只需写一次,则可供所有的controller层代码共用,再也不用在每个controller中、每个method中写重复的数据处理、异常处理、日志处理等信息。

3、controller测试

    此为controller的测试代码。UserEntity类为自己定义的一个实体类。

4、正常情况运行结果:

5、异常情况运行结果:

总结:利用AOP来处理,让开发只关注业务逻辑,不用再重复每次url请求的数据处理、异常处理、try catch、log日志。


觉得写得好,给一个赞哇!谢谢!