什么是AOP
Aop的作用和优势
结耦:
目标+增强=切面
AOP的底层实现
基于JDK的动态代理
package com.spring.jdk;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxyTest {
public static void main(String[] args) {
//目标对象
final Target target=new Target();
//增强对象
Advice advice=new Advice();
//返回值 就是动态生成的代理对象
TargetInterface proxy=(TargetInterface)Proxy.newProxyInstance(
target.getClass().getClassLoader(),//目标对象类加载器
target.getClass().getInterfaces(),//目标对象相同的接口字节码对象数组
new InvocationHandler() {
//调用代理对象的任何方法,实质执行的都是invoke方法
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
advice.before();//前值增强
method.invoke(target, args);//执行目标方法
advice.afterReturning();//后置增强
return null;
}
}
);
}
}
package com.spring.jdk;
public class Advice {
public void before()
{
System.out.println("前置增强----");
}
public void afterReturning() {
System.out.println("后置增强----");
}
}
package com.spring.jdk;
public class Target implements TargetInterface{
public void save() {
System.out.println("save running");
}
}
package com.spring.jdk;
public interface TargetInterface {
public void save();
}