阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置

时间:2021-01-11 21:34:56

阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置

复制依赖和改jar包方式
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
src下的都复制过来。
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
复制到新项目里了
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
bean.xml里面复制上面一行代码到下面。把aop改成context。
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置

阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置

配置spring容器创建时要扫描的包

阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
Service的配置这里就可以删除了
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置

配置注解

使用@Service注解
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置

开始AOP配置

把通知类交给Spring来管理

阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
在Logger上加注解。之类注意,@Service和@Repository都不合适。因为logger属于三层
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置

所以这里用@Component这个注解来配置
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
写完上面的@Component的注解后。bean.cml内的配置就可以删除了
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置

配置切面类

阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
注意Before这里是aspectj这个包里的,不要和JUnit的混了。
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置

阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
环绕通知
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
写完这些通知的注解就报错。因为没有切入点表达式

这是我们之前的bean.xml内配置的切入点表达式
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
新定义的私有方法pt1在pt1的上面定义的切入点表达式和注解
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
beam.xml内这些就都可以删除了
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置

开启Spring开启注解AOP的支持

阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置

引用注解表达式

阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
这里测试前面四个通知的时候,先把环绕通知注释掉
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置

测试

阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
后置居然在最终的前面了
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
我们都知道 后置通知和异常是互斥的。这里把异常放开
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
后置通知消失了 变成了异常通知
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置

Spring基于注解的,这四个通知确实有调用的顺序问题,所以我们在开发中,要有一个慎重的考虑

环绕通知放开,其他通知都注释掉
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
通知都注释掉
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
环绕通知没有这个问题。这个也好理解,因为代码是我们自己写的 想让他什么时候执行,就什么时候执行
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
把异常放开的执行效果
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
如果用注解的话,更建议用环绕通知,因为注解在调用的通知顺序上有问题

总结

注解的配置确实比较简单。因为bean.xml配置就剩下这两行了
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
切入点的配置也很规范
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置

演示下括号的问题

只写了方法名 ,没写后面的括号
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
这里其实已经提示报错了
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
运行就会报错。

不使用xml配置的方法

讲义的最后
阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置