拦截器

it2022-05-27  78

package 拦截器;public interface 一个接口 {    public void sys();}

package 拦截器;public class 一个类 implements 一个接口{    @Override    public void sys() {        // TODO 自动生成的方法存根        System.out.println("一个类执行了");    }}

package 拦截器;import java.lang.reflect.Method;public interface 拦截器接口 {    public boolean befor(Object proxy,Object obj, Method me,Object[] objs);    public void around(Object proxy,Object obj, Method me,Object[] objs);    public void after(Object proxy,Object obj, Method me,Object[] objs);}

package 拦截器;import java.lang.reflect.Method;public class 拦截器类 implements 拦截器接口{    @Override    public boolean befor(Object proxy, Object obj, Method me, Object[] objs) {        // TODO 自动生成的方法存根        System.out.println("拦截器befor执行了");        return true;    }    @Override    public void around(Object proxy, Object obj, Method me, Object[] objs) {        // TODO 自动生成的方法存根        System.out.println("拦截器around执行了");    }    @Override    public void after(Object proxy, Object obj, Method me, Object[] objs) {        // TODO 自动生成的方法存根        System.out.println("拦截器after执行了");    }}

package 拦截器;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class 动态代理类 implements InvocationHandler{    Object obj = null;    String ljqm = null;    public 动态代理类(Object obj ,String ljqm) {        this.obj = obj;        this.ljqm = ljqm;    }    public static Object ss(Object obj ,String ljqm) {        return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), new 动态代理类(obj,ljqm));    }    @Override    public Object invoke(Object arg0, Method arg1, Object[] arg2) throws Throwable {        if(ljqm == null) {            return arg1.invoke(this.obj, arg2);        }        Object obj = null;        拦截器接口 lj= (拦截器接口) Class.forName(ljqm).newInstance();        if(lj.befor(arg0, this.obj, arg1, arg2)) {            obj = arg1.invoke(this.obj, arg2);        }else{            lj.around(arg0, this.obj, arg1, arg2);        }        lj.after(arg0, this.obj,arg1, arg2);        // TODO 自动生成的方法存根        return obj;    }    }

package 拦截器;public class 实现类 {    public static void main(String[] args) {        一个接口 u = (一个接口) 动态代理类.ss(new 一个类(), "拦截器.拦截器类");        u.sys();    }}

转载于:https://www.cnblogs.com/xiaosuye/p/9652614.html


最新回复(0)