zoukankan      html  css  js  c++  java
  • JAVA 动态代理

    被代理类

    package com.chirs.Demo2;

    public class UserServiceImpl implements UserServices {

    public void add() {
    System.out.println("增加了一个用户");
    }

    public void delete() {
    System.out.println("删除了一个用户");
    }

    public void update() {
    System.out.println("修改了一个用户");
    }

    public void query() {
    System.out.println("查询了一个用户");
    }
    }

      

      代理类

    package com.chirs.Demo3;

    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;

    public class ProxyInvocationHandle implements InvocationHandler {
    // 被代理的接口
    private Object object;

    public void setObject(Object object) {
    this.object = object;
    }

    // 获得代理类
    public Object getProxy() {
    return Proxy.newProxyInstance(this.getClass().getClassLoader(),
    object.getClass().getInterfaces(), this);
    }

    // 调用处理程序
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    log(method.getName());
    Object result = method.invoke(object, args);
    return result;
    }

    public void log(String msg) {
    System.out.println("调用了 " + msg + " 方法");
    }
    }

    调用类
    package com.chirs.Demo3;

    import com.chirs.Demo2.UserServiceImpl;
    import com.chirs.Demo2.UserServices;

    public class Client {
    public static void main(String[] args) {
    // 真实角色
    UserServiceImpl userService = new UserServiceImpl();
    // 代理角色 不存在
    ProxyInvocationHandle pih = new ProxyInvocationHandle();
    // 设置要代理的对象
    pih.setObject(userService);
    UserServices proxy = (UserServices) pih.getProxy();
    proxy.delete();
    }
    }
  • 相关阅读:
    使用XMLReader读XML
    C#命名空间大全详细教程
    C# using 三种使用方式
    SVN服务器搭建
    简单的自定义Session
    python学习第十八天 --错误&异常处理
    锁的等级:方法锁、实例锁、类锁
    java线程池如何合理的设置大小
    挖掘两个Integer对象的swap的内幕
    实现线程同步的方式
  • 原文地址:https://www.cnblogs.com/wooroc/p/13558762.html
Copyright © 2011-2022 走看看