码迷,mamicode.com
首页 > 其他好文 > 详细

拦截器

时间:2018-09-15 22:29:46      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:实现类   import   loader   cat   etc   get   动态代理   oid   new   

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();
    }
}

拦截器

标签:实现类   import   loader   cat   etc   get   动态代理   oid   new   

原文地址:https://www.cnblogs.com/xiaosuye/p/9652614.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!