SpringAOP
AOP:
面向切面编程
将与业务无关的公共行为和逻辑进行抽取和封装为一个可重用的模块
这个模块即为切面(aspect),减少重复代码,降低了模块间的耦合度
底层使用动态代理实现
常用AOP使用场景
记录操作日志
通过切面通知方式做增强
eg:@Around(“pointcut()”)
缓存处理
Spring中内置的事务处理
编程式事务:通过TransactionTemplate实现,对代码有侵入性,很少使用
声明式事务:使用AOP使用,添加@Transaction注解即可
定义切面类
//根据切点表达式的内容决定增强的方法
@Around("pointcut()")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable{
//获取方法对象
//从注解中取出信息
//编写增强业务
//执行方法
joinPoint.proceed();
}
定义切点(切点表达式)
//被@log注解标注的类为切点
@PointCut("@annotation(com.annotation.log)")
private void pointcut(){
}