面向切面编程--将重复的代码抽象出来
计算器方法中,日志和业务混在一起,AOP将日志代码全部抽象出去进行统一处理,计算器方法中只保留核心的业务代码
核心业务和非业务代码的解耦合
底层使用动态代理
spring-mybatis整合:注意版本对应
-导坐标,pom.xml
aspectjweaver
-制作连接点方法,Dao接口与实现类
@Repository
-制作共性功能,通知类与通知
-定义切入点
@PointCut()
-绑定切入点与通知关系
@Before("***")
@Component
@Aspect
-开启Spring对AOP的注解驱动支持
@EnableAspectJAutoProxy / /(配置类)
描述切入点通常描述接口,不描述实现类(降低耦合度)
切入点:要进行增强的地方
切入点表达式:进行增强的方法的描述方法
标准格式:动作关键字(访问修饰符 返回值 包名.类/接口名.方法名(参数)异常名)
execution(public User com.www.service.UserService.findById(int))
通配符:
*:匹配任何数量字符 |
..:匹配任何数量字符的重复,如在类型模式中匹配任何数量子包;而在方法参数模式中匹配任何数量参数。 |
+:匹配指定类型的子类型;仅能作为后缀放在类型模式后边。 |
AOP通知类型
@Before 当前通知方法在原始切入点方法前运行 | |
@Around 方法注解,设置当前通知方法与切入点的绑定关系,当前通知方法在原始切入点方法前后运行 | 依赖ProceedingJoinPoint 实现对原始方法调用 接收返回值设定为Object类型 必须抛出Throwable |
@After 后置通知 | |
@AfterReturning 返回后通知 | 在原始切入点方法正常执行完毕后运行 |
@AfterThrowing 抛出异常后通知 | 在原始切入点方法运行抛出异常后执行 不能访问目标方法的执行的结果 |
@AfterReturning(value = "execution(publiv4c int com.***",returning="result")
public void afterReturning(JoinPoint joinPoint,Object result){
String name = joinPoint.getSignature().getName();
System.out.println(name+"方法的结果"+result);
}