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();
    }
    }
  • 相关阅读:
    孔曰成仁,孟曰取义
    mysql索引&实现原理
    MySQL存储引擎
    HashMap原理
    反射
    list对象属性排序
    mysql数据表操作&库操作
    mysql字段类型
    java线程池初步理解
    java四种内部类
  • 原文地址:https://www.cnblogs.com/wooroc/p/13558762.html
Copyright © 2011-2022 走看看