AOP 实现原理
什么是 AOP?
全称为 Aspect Oriented Programming: 面向切面编程 . 通过预编译方式和运行期动态代理的方式实现功能的一种技术 。
利用 AOP 可以对业务逻辑的各个部分进行隔离 , 从而使得业务逻辑各部分之间的耦合度降低 , 提高程序的可重用性 , 并且提高开发效率 。
AOP 作用
AOP可以做到在程序的运行期间, 不修改业务代码的情况下对方法进行功能的增强。
AOP 优势
AOP可以减少重复的代码
AOP可以在很大程度上提高开发效率
AOP编写出来的代码, 可以很方便的进行维护
AOP 的实现原理
AOP 的底层是通过 spring 提供的动态代理技术实现的 . 在程序的运行期间 , spring 动态生成代理对象 , 代理对象的方法在执行时就可以进行增强功能的介入 , 从而完成目标对象方法的功能增强 。
基于 JDK 的动态代理
目标接口
public interface ITarget {
void save();
}
目标方法
public class Target implements ITarget{
@Override
public void save() {
System.out.println("保存数据");
}
}
增强方法
public class Advice {
public void before() {
System.out.println("前置增强");
}
public void after() {
System.out.println("后置增强");
}
}
代理
public class JDKProxy {
public static void main(String[] args) {
Target target = new Target();
Advice advice = new Advice();
ITarget proxy = (ITarget) Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
(proxy1, method, args1) -> {
advice.before();
final Object invoke = method.invoke(target, args1);
advice.after();
return invoke;
});
proxy.save();
}
}