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

动态代理的例子

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

动态代理的例子

什么是动态代理呢?

我们先来说一个案例,假设现在存储了一些数据,我们对数据有增删改查这四种权限,当我们操作后需要留下记录,如果将增删改查写成四个方法,那我们是不是还需要在这四个方法里再添加我们的操作记录,有没有什么办法可以让我的权限与这些记录分开呢?

动态代理实现:

先写用户接口

public interface UserImp{
    public abstract void add();
    public abstract void delete();
    public abstract void update();
    public abstract void select();
}

实现接口:
 

public class User implements UserImp{
    @Override
    public void  add(){
        System.out.println("添加数据");
    }
    @Override
    public void  delete(){
        System.out.println("删除数据");
    }
    @Override
    public void update(){
        System.out.println("修改数据");
    }
    @Override
    public void select(){
        System.out.println("查找数据");
    }

}

Run部分:

注意这里为了使用方法,我们类型转换用的是用户接口类而不是他的子类

否则报错:java.lang.ClassCastException:

 public class DynamicAgentDemo {
    public static void main(String[] args) throws  Exception{
        User user = new User();
        Object o = Proxy.newProxyInstance(user.getClass().getClassLoader(),
                user.getClass().getInterfaces(), new MyInvocationHandler(user));
        UserImp u=(UserImp) o;
        u.add();
        u.delete();
        u.select();
        u.update();
    }
}

这是实现动态代理的方法:

public static Object newProxyInstance(ClassLoader loader,类[] interfaces,InvocationHandler h) throws IllegalArgumentException返回指定接口的代理类的实例,该接口将方法调用分派给指定的调用处理程序。

最后一个InvocationHandler需要我们自己实现

public class MyInvocationHandler implements InvocationHandler {
    private Object obj;
    public MyInvocationHandler(Object obj) {
        this.obj=obj;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        Object result = method.invoke(obj, args);
        System.out.println("操作日志");
        return result;
    }
}

 运行结果:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/356580.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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