一.概念
区别于oop(封装继承)为纵向开发
aop为oop的完善方法 面向编程思维缺点:
- 多了好多业务无关的模块
- 继承父类的方法:
- 不是抽象的,可以完成使用,完全重写父类方法
- 无法局部修改
面对零散的非核心的业务,会出现冗余代码
aop横向思维: 允许类的正常继承 提取一个非核心的业务代码统一到一个公共模块,存,利用某些技术横切出来 动态代理技术 **核心关注点
- 横切关注点**:
- 提取横向插入
- 增强:
- 织入:配置的动作
- 前置通知:目标方法之前@before
- 返回通知:正常返回的AfterRrturning
- 异常增强:事务回滚@afterThrowing
- 后置通知:最后一定会被调用的@after
- 环绕通知:环绕调用@Around
- (try...catch)
- 切点一定是连接点,被选中切入的连接点 连接点:可以被切入的方法 切入点: 目标类:要被切入的类的对象
代理对象:
- 目标的核心代码
- 增强代码
二.AOP的框架 Soring AOP 解决aop编程思维的框架,更加的简单的解决 只要写好配置文件,框架底层用代理技术 jdk接口,cglib无接口 简化操作
-
导入依赖
-
正常编写业务
-
编写ioc配置和文件
-
测试环境
-
定义增强方法
-
增强类的配置:存储插入切点的位置,切点指定,切面配置
-
开启aop的配置
-
定义方法:增强类的内部要写代码,
-
使用注解配置对应位置
-
配置切点表达式 execution
-
补全注解: 放入ioc容器@Component 配置切面@AsPECT
aspectj 开启支持 配置文件:标签aop开启支持aspect支持 连接点:JoinPoint(包含目标方法的信息
todo: 增强方法获取目标信息 发返回结果 获取异常信息(afterthroing)
获取类的信息 获取方法名称