一、AOP:面向切面编程
1、通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术
2、AOP 是 OOP 的延续
3、集中解决共性问题:日志、参数合法性验证、异常处理、事务控制等
OOP:面向对象编程:封装、继承、多态
继承:把ABC三个类共性的代码抽出到父类
OOP编程思路:纵向开发
AOP编程思路:横向开发 在指定位置插入指定代码
指定代码:LogUtil工具类中 before和after方法
指定位置:*Phone方法:A点和B点
面向切面编程:
自动的把指定工具类动态切入指定的位置
通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术
切面 (Aspect):就是LogUtil工具类
连接点 (Joinpoint):切面可以插入的位置 可切入点
通知 (Advice):before和after方法
切入点 (Pointcut):最终切入的连接点叫做切入点,
连接点被筛选之后就是切入点
织入:将通知切入到指定切入点就是叫做织入
目标对象 target:被切入的对象
二、Spring AOP 的实现—预编译
第一步:导入jar包
第二步:applicationContext.xml
第三步:将目标对象进行Bean管理PhoeBizImpl
第四步:将工具类(未来的切面) 进行Bean管理
第五步:开启AOP编译
第六步:切入点
第七步:切面
第八步:编写通知
注意:
1、 AOP 相关内容必须配置在<aop:config>标签内部
2、 JoinPoint类
3、 切入点函数
execution(访问修饰符 返回值类型 包名.包名.包名.类名.方法名(参数类型))
返回值类型:可以写成 * 带有所有返回值
包名: 两个句点 表示 当前包和子孙包 com..
*.. 所有包及子孙包
类名:* 代表所有类
方法名:* 代表所有方法
(参数类型): *代表一个参数所有类型 不写不算
*,* 两个随便 .. 个数和类型都随便
* *..*.*(..)
返回值类型任意、所有包及子孙包、所有类、
所有方法、参数个数和类型任意
计算器
接口CalcInter add sub mul div 实现类 CalcImpl
AOP底层实现模式---动态代理模式 有接口实现接口 没有接口继承当儿子
AOP:把指定工具类|公共问题解决代码,动态切入指定程序的指定位置上
一处编写 到处使用