一、什么是AOP?
- AOP:面向切面编程,采用的是横向抽取机制,将分散在各分方法上的重复代码提取出来,然后再程序编译或者是运行时,再将这些提取出来的代码应用到需要执行的方法。
- AOP的本质是代理。对方法进行增强
- JDK动态代理 --> 基于接口
- CGLIB代理 --> 基于子类
二、Spring AOP面向切面编程
execution(返回类型 包路径.方法 )
* 代表任意类型,或是类上的所有
..代表任意多个参数。 如果用在包路径上 指:当前包和子包下的所有
execution(* com.szy..*.*(..) : com.szy包下的所有类,不包括包下的。
- Advice通知:aop在切点上执行的增强处理。
- Pointcut切点:对哪些类、哪些方法进行增强。
- Aspect切面:通常是一个类,里面定义了通知和切点。 aop = 通知 + 切点
- 五种通知的类型:
- 前通知:方法执行之前发出的通知
- 后通知:方法执行之后发出的通知,又称最终通知,无论如何都会执行
- 返回后通知:成功返回后的通知,只有正常返回才会执行
- 异常通知:发生异常后的通知(适合做事务),只有异常抛出的时候执行
- 环绕通知:在方法的执行前后进行一些增强,在方法执行前后进行一些通知 = 前通知+后通知
- PointCut切点
- JDK**PointCut 基于正则表达式的切点
- AspectJExpressionPointCut 基于aop的切点表达式
三、使用AspectJ开发
- 基于XML配置文件方式
- 基于注解的AspectJ开发
四、Spring和Mybatis整合思想
- mybatis:持久层框架
- spring:容器,管理类的。
- 可以管理会话工厂,会话工厂的特点是:一旦创建一直存在。最好设计为单例的。而spring正好设计为scope为单例模式。
- 可以管理mapper
五、spring的事务管理
- xml配置文件方式
- 注解事务
<tx:annotation-driven transaction-manager="transactionManager"/>
- <!-- 开启注解 -->
- @Transactional
- 可以注解到方法上,表示当前方法进行事务管理
- 可以注解到类上,表示当前类的所有方法都进行事务管理
注意:1、spring的事务管理,一定要对进行事务管理的地方往外抛异常,而不能try…catch..捕捉异常
2、如果想主动对事务进行回滚,可以往外抛异常throw new RuntimeException( );