springAOP(Aspect Oriented Programming) 也称为切面编程
之所以得到这个名称, 也是翻译过来的,光看名字其实不太好理解
AOP解决了什么问题?
aop本身不是取代oop, 而是oop的一种补充, 我们看一下下面这个代码
insert(){ //插入一条数据
//1.参数验证
checkArgs(); //参数验证方法
//2.前置日志
beforeLog();
//3.核心, 添加数据
add();
//4.后置日志
afterLog();
}
delete(){ //删除一条数据
//1.参数验证
checkArgs(); //参数验证方法
//2.前置日志
beforeLog();
//3.核心, 删除数据
sub();
//4.后置日志
afterLog();
}
在上面这个oop代码中, 可以清晰的看到, 当不同的方法中, 存在相同的逻辑处理时, 往往通过抽取共同的代码封装为方法, 然后再调用, 但这样的做法耦合依然太高. 在添加时需要先有这个方法, 通用方法删除时所有调用的也要去掉这一部分, 否则编译不通过
我们都知道, 代码肯定要先被实例化到内存中, 那么我们为何不在内存中动态给方法插入通用方法呢?这样一来是不是代码就只需要写各自的核心部分就可以了, 这就是springAOP给出的解决方案.
简单点说, springAOP就是在运行时(内存中), 动态给方法或某个位置插入代码, 至于为何取名切面编程, 也许是因为先切开, 再插入代码, 比较形象而取名
springAOP有多种实现方式, 比如代理模式.