Java 基于接口的动态代理

UserDao接口

package com.pry.cn;

public interface UserDao {
    public int add(int a,int b);
    public String update(String id);
}

  

UserDao实现类

package com.pry.cn;

public class UserDaoImpl implements UserDao {
    @Override
    public int add(int a, int b) {
        System.out.println("add方法执行了");
        return a + b;
    }

    @Override
    public String update(String id) {
        System.out.println("update方法执行了");
        return id;
    }
}

  

代理实现方法

class UserDaoProxy implements InvocationHandler {
    private Object obj;

    public UserDaoProxy(Object obj) {
        this.obj = obj;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("增强方法执行前:" + method.getName() + "参数:" + Arrays.toString(args));
        Object res = method.invoke(obj, args);
        System.out.println("增强方法执行后:" + obj);
        return res;
    }
}

  

执行对象

public class MainRum {
    public static void main(String[] args) {
        Class[] interfaces = {UserDao.class};
        UserDaoImpl userDao = new UserDaoImpl();
        UserDao dao = (UserDao) Proxy.newProxyInstance(MainRum.class.getClassLoader(), interfaces, new UserDaoProxy(userDao));
        dao.add(2, 6);
    }
}

  

输出结果

增强方法执行前:add参数:[2, 6]
add方法执行了
增强方法执行后:com.pry.cn.UserDaoImpl@2503dbd3

  

原文地址:https://www.cnblogs.com/MineLSG/p/13290443.html