动态代理

在java中   java.lang.reflect包下提供了一个proxy类  和  一个  InvocationHandle接口

    InvocationHandle 接口  的作用是生成动态代理对象    JDK 提供的代理只能针对接口做代理

    proxy 中有一个方法    newProxyInstance()   :

           这个方法有三个参数:      类加载器     接口    InvocationHandle对象

public interface User {
    public void add();
    public void delete();
}
public class UserImp implements User {

    @Override
    public void add() {
        System.out.println("添加功能");
    }

    @Override
    public void delete() {
        System.out.println("删除功能");
    }

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

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

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("账号校验");      //  代理的方法
        method.invoke(target, args);     //  调用方法
        System.out.println("日志记录");    //  代理的方法
        return null;
    }

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

public class Test {

    public static void main(String[] args) {
        UserImp ui = new UserImp();
        ui.add();
        ui.delete();
        System.out.println("--------------");
        MyInvocationHandler mh = new MyInvocationHandler(ui);         //  生成动态代理对象
        User u = (User)Proxy.newProxyInstance
                (ui.getClass().getClassLoader(), ui.getClass().getInterfaces(), mh);   //  三个参数      累加载器,接口,动态代理对象
        u.add();           //方法执行前后就动态执行   动态代理的方法        
        u.delete();
    }

}
竹杖芒鞋轻胜马,一蓑烟雨任平生。 回首向来萧瑟处,也无风雨也无晴。
原文地址:https://www.cnblogs.com/yaobiluo/p/11360621.html