栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java动态代理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java动态代理

JDK动态代理

1.编写接口,提供对外需要被代理的方法
2.编写这个类的实现类,真实被代理的对象
3.编写一个InvocationHandler接口实现类,它里面定义了一个invoke方法调用代理对象时执行具体方法

接口

public interface IHello {
    void sayHello(String name);
}

接口实现类

public class HelloImpl implements IHello {

    @Override
    public void sayHello(String name) {
        System.out.println("hello "+name);
    }
}

InvocationHandler接口实现类

public class JdkProxy implements InvocationHandler {
    private Object target;

    
    public Object binding(Object target){
        this.target=target;
        return Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),this);
    }
    
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("调用之前");
        Object res = method.invoke(target, args);
        System.out.println("调用之后");

        return res;
    }
}

测试

public class JProxyTest {
    public static void main(String[] args) {
        JdkProxy jdkProxy = new JdkProxy();
        IHello binding = (IHello) jdkProxy.binding(new HelloImpl());
        binding.sayHello("jdk");

    }
}

CGLIB动态代理

1.编写真实被代理的对象(类)
2.编写一个MethodInterceptor接口实现类,它里面定义了一个intercept方法调用代理对象时执行具体方法

被代理的对象(类)

public class Person {
    public void sayHello(String name) {
        System.out.println("Hello " + name);
    }
}

MethodInterceptor接口实现类

public class ProxyCglib implements MethodInterceptor {
    public Object getPorxy(Class t){
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(t);
        enhancer.setCallback(this);
        return enhancer.create();
    }
    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        System.out.println("调用对象之前");
        Object o = methodProxy.invokeSuper(o, objects);
        System.out.println("调用对象之后");
        return o;
    }
}

测试

public class TestDemo {
    public static void main(String[] args) {
        ProxyCglib proxyCglib = new ProxyCglib();
        Person porxy = (Person) proxyCglib.getPorxy(Person.class);
        porxy.sayHello("kkkk");
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/354350.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号