设计模式——代理模式之动态代理

设计模式——代理模式之动态代理,第1张

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);
    }
}

欢迎小伙伴们积极指正和讨论,一起共同成长。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/799510.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存