jdk动态代理是基于接口实现
public class JdkProxy implements InvocationHandler {
private Object target;
public JdkProxy(Object target) {
this.target = target;
}
public Object getProxy() {
// 使用proxy类生成代理对象
return Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if ("hello".equals(method.getName())) {
System.out.println("JdkProxy before DemoService.hello");
}
// 正常执行
return method.invoke(target, args);
}
}
cglib动态代理是基于继承实现
public class CglibProxy implements MethodInterceptor {
public Object getProxy(Class clazz) {
// 创建CGLIB核心类
Enhancer enhancer = new Enhancer();
// 设置父类
enhancer.setSuperclass(clazz);
// 设置回调函数
enhancer.setCallback(this);
// 生成代理对象
return enhancer.create();
}
@Override
public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
if ("hello".equals(method.getName())) {
System.out.println("CglibProxy before method hello");
}
return methodProxy.invokeSuper(proxy, args);
}
}
欢迎小伙伴们积极指正和讨论,一起共同成长。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)