白话切面编程:
切面要做的事就是,监听某个事件,对某个事件发生前,发生后,成功结束后,发生异常后,结束后进行你想要的操作,并且,不需要被监听的事件显式调用这些操作,即,这些操作都是自动执行的,就好像被监听的事件都不知道一样。
样例:
对于数据库操作涉及到事务等概念的时候,需要一大堆的样板代码:
利用aop,我们可以将连接数据库,释放数据库连接等操作去掉,同时,没有异常发生的话,自动提交事务,否则,自动回滚。这样可以达到简化DAO的效果:
AOP术语
切面:切面就是aop工作环境,在什么层面进行工作。
通知:就是事件发生前后要做的事情。
切点:被监听的方法就是切点。
连接点:判断条件,判断哪些是切点。
织入:生成代理对象的过程。
使用注解的方式实现AOP
1.创建切点(一般都是接口)。
2.创建切面
execution就是判断条件
第一个*是任意返回值
(..)表示任意参数
使用PointCut代替重复的判断条件:
测试Aop
开启AspectJ并使用JavaConfig
给AOP方法传递参数
被监听方法:
AOP方法:
引入:
在执行AOP之前进行检查
1.定义检查接口
2.定义实现
3.添加检查接口到切面
4.使用
多切面
可以使用@Order(n)注解次序
效果: