jdk动态代理
interface TargetInterface {
public void method();
}
class Target implements TargetInterface {
@Override
public void method() {
System.out.println("Target running....");
}
}
class Target1{
private Object target;
public Target1(Object target) {
this.target = target;
}
public Object getProxy(){
ClassLoader classLoader = target.getClass().getClassLoader();
Class<?>[] interfaces = target.getClass().getInterfaces();
InvocationHandler invocationHandler = new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("前置");
Object invoke = method.invoke(target, args);
System.out.println("后置");
return invoke;
}
};
return Proxy.newProxyInstance(classLoader,interfaces,invocationHandler);
}
public static void main(String[] args) {
Target1 target1 = new Target1(new Target());
TargetInterface proxy = (TargetInterface) target1.getProxy();
proxy.method();
}
}
cglib代理
class Target2 {
public void method() {
System.out.println("Target running....");
}
}
class cglib {
public static void main(String[] args) {
Target2 target2 = new Target2();
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(Target2.class);
enhancer.setCallback(new MethodInterceptor() {
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
System.out.println("前置");
Object invoke = method.invoke(target2, objects);
return invoke;
}
});
Target2 proxy = (Target2) enhancer.create();
proxy.method();
}
}