如果有多个切面类,切这个目标类。
切面类 1 日志记录的通知方法。
切面类 2 验证的通知方法。
目标方法运行到了一个位置,普通通知才开始执行,不影响目标方法的执行。
环绕通知直接执行了目标方法。
步骤:
1.把切面类加入到ioc容器中。加个@Compnent标签
2.告诉Spring,这是一个切面类。加个@Aspect标签
3.配置通知方法何时何地运行,比如加@Before。
4.告诉Spring,哪个目标方法,写切入点表达式。
5.切入点表达式引用
之前抽取了可重用切入点表达式的空方法(复制全类名)
6.returning=result,throwing=exception
7.有两个切面类,谁先切目标方法?
先切的,后出去。
可以使用order标签,更改切顺序。
AOP使用场景。
1.AOP加日志,保存到数据库
2.AOP做权限验证。
3.AOP做事务控制。
AOP怎么做事务控制。
前置通知:获取连接,设置为非自动提交。
返回通知:提交commit
异常通知:回滚rollback
后置通知:关闭资源
基于注解的AOP
基于配置的AOP
1.首先也是把切面类和目标类加入到IOC容器中。
用标签
目标类注册一个组件
切面类注册一个组件
2.告诉Spring哪一个是切面类,我们还需要用到AOP的名称空间。
aop:config标签 aop的配置文件
aop:aspect标签 指定切面类
可以用ref 引用外部的切面类(bean)
3.通知方法何时何地运行-----五个通知注解/切入点表达式!
<aop:before method=>前置通知:
pointcut指定切入点表达式 returning返回值 thorwing异常
可重用切入点表达式 aop:pointcut标签 声明位置决定别的切面可不可以用。
引用pointcut-ref
虽然注解模式简单,但是你导入了一个外部的jar包
不是你自己写的,所以你无法在上面加注解。
重要的用配置。
不重要的用注解。