一、springAOP的底层实现原理
AOP实现原理是由动态代理实现
1. jdk动态代理
1.默认
2.基于接口实现
代码实现
public class SpringAOPTest {
//目标类
final Target target = new Target();
//通知类
final Advice advice = new Advice();
@Test
void test(){
TargetInterface proxy = (TargetInterface) Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new InvocationHandler() {
@Override
public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
//前置通知
advice.before();
//目标方法
Object invoke = method.invoke(target,objects);
//后置通知
advice.afterReturning();
return invoke;
}
}
);
proxy.save();
}
}
执行结果
2. CGlib动态代理
1.基于父类概念实现,(不是用继承实现)
代码实现
@Test
void test1(){
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(target.getClass());
enhancer.setCallback(
new MethodInterceptor() {
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
//前置通知
advice.before();
//目标方法
method.invoke(target,objects);
//后置通知
advice.afterReturning();
return null;
}
}
);
Target proxy = (Target) enhancer.create();
proxy.save();
}
执行结果