面向切面编程(aspect-oriented programmingAOP)主要实现的目的是针对业务处理过程中的切面进行提取,诸如日志、事务管理和安全这样的系统服务从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性同时提高了开发的效率。
* 可以在执行方法之前和之后改变参数和返回值 * 可以在执行方法之前对目标方法的参数进行判断 * 通过抛出一个异常来阻断目标方法的访问 * 可以在执行方法之后对目标方法的参数进行判断 * 与After的区别在于AfterReturning只有在方法执行成功的之后才會被织入如果After和 * AfterReturning同时存在于一个文件中,谁写在前面谁先运行
也可以单独的定义切入点
项目启动后可能看到以下输出:
访问网页可能看到以下输出:
Around增强:执行方法之后,模拟结束事物
After增强:模拟方法结束后的释放资源
After增强:被织入增强处理的目标方法为:welcome
After增强:目标方法的参数为:[除了Around其他的都是是不可以修改目标方法的参数的]
AfterReturning增强:目标方法的参数为:[除了Around其他的都是是不可以修改目标方法的参数嘚]
在拦截器注册之前织入的
实现AOP的切面主要有以下几个要素:
-
使用@Aspect注解将一个java类定义为切面类
-
使用@Pointcut定义一个切入点,可以是一个规则表達式比如下例中某个package下的所有函数,也可以是一个注解等
-
根据需要在切入点不同位置的切入内容,5种类型的通知
-
使用@Before在切入点开始处切入内容
-
使用@After在切入点结尾处切入内容
-
使用@AfterReturning在切入点return内容之后切入内容(可以用来对处理返回值做一些加工处理)
-
使用@Around在切入点前后切入內容并自己控制何时执行切入点自身的内容
-
使用@AfterThrowing用来处理当切入内容部分抛出异常之后的处理逻辑
}