1、JDK 动态代理:
java.lang.reflect 包中的 Proxy 类和 InvocationHandler 接口提供了生成动态代理类的能力。
public interface Subject {
void request();
}
public class RealSubject implements Subject {
@Override
public void request() {
System.out.println("实体类方法");
}
}
public class ProxyInvocationHandler implements InvocationHandler {
private Object realSubject;
public ProxyInvocationHandler(Object realSubject) {
super();
this.realSubject = realSubject;
}
@Override
public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
System.out.println("---------方法调用前-------");
Object result= method.invoke(realSubject,objects);
System.out.println("---------方法调用后-------");
return result;
}
}
@Test
public void testProxy(){
Subject realSubject=new RealSubject();
Subject subject= (Subject) Proxy.newProxyInstance(realSubject.getClass().getClassLoader(),
realSubject.getClass().getInterfaces(),
new ProxyInvocationHandler(realSubject));
subject.request();
}
2、Cglib 动态代理:
Cglib (Code Generation Library )是一个第三方代码生成类
库,运行时在内存中动态生成一个子类对象从而实现对目标对象功能的扩展
public class CglibProxy implements MethodInterceptor {
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
System.out.println("-------------cglib动态代理调用前--------------");
Object result= methodProxy.invokeSuper(o,objects);
System.out.println("-------------cglib动态代理调用后--------------");
return result;
}
}
@Test
public void testCglib(){
Enhancer enhancer=new Enhancer();
enhancer.setSuperclass(RealSubject.class);
enhancer.setCallback(new CglibProxy());
RealSubject realSubject=(RealSubject)enhancer.create();
realSubject.request();
}
1211

被折叠的 条评论
为什么被折叠?



