动态代理

来源:互联网 发布:新手淘宝客 编辑:程序博客网 时间:2024/05/01 12:53
一、jdk自带的动态代理:

1、接口类UserManager与实现类UserManagerImpl
2、代理类
        public class LogHandler implements InvocationHandler {    
            private Object targetObject;    
            public Object newProxyInstance(Object targetObject) {
                this.targetObject = targetObject;
                return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
                                       targetObject.getClass().getInterfaces(), this);
            }    
            public Object invoke(Object proxy, Method method, Object[] args)
                    throws Throwable {
                System.out.println("start-->>" + method.getName());
                for (int i=0; i<args.length; i++) {
                    System.out.println(args[i]);
                }
                Object ret = null;
                try {
                    //调用目标方法
                    ret = method.invoke(targetObject, args);
                    System.out.println("success-->>" + method.getName());
                }catch(Exception e) {
                    e.printStackTrace();
                    System.out.println("error-->>" + method.getName());
                    throw e;
                }
                return ret;
            }
        }
3、客户端调用类
        public class Client {
            public static void main(String[] args) {
                LogHandler logHandler = new LogHandler();
                UserManager userManager = (UserManager)logHandler.newProxyInstance(new UserManagerImpl());
                String name = userManager.findUser("0001");
                System.out.println("Client.main() --- " + name);
            }
        }
        
        

二、是CGlib代理:


1、实现类MyClass
2、代理类   
    public class MethodInterceptorCallBack implements MethodInterceptor{
        public Object intercept(Object object, Method method, Object[] arg,
                MethodProxy methodProxy) throws Throwable {
            System.out.println("the method of MethodInterceptor");
            System.out.println(method);
            methodProxy.invokeSuper(object, arg);
            return null;
        }
    }      
3、调用类:
    public class TestByCGlib {
    public static void main(String[] args) {
        Enhancer enhancer = new Enhancer();//创建Enhancer对象        
        enhancer.setSuperclass(MyClass.class);//指定要代理的类(被拦截的类)        
        enhancer.setCallback(new MethodInterceptorCallBack());//设置回调函数        
        MyClass myClass = (MyClass)enhancer.create();//生成代理类        
        myClass.m1();//调用代理类中的方法
    }
}                       
                                                                       
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 在外地上学学籍怎么办 偷渡后国内资产怎么办 手机系统太低怎么办 拍古装是短发怎么办 吞下一个李子核怎么办? 宝宝吞了荔枝核怎么办 美吉姆培训不过怎么办 1岁宝宝挑食怎么办 宝宝不愿意开口说话怎么办 自闭症孩子不爱学习怎么办 宝宝不独立走路怎么办 六个月宝宝不认人怎么办 小孩隔奶奶涨怎么办 小孩段奶奶涨怎么办 1岁半还不会说话怎么办 孩子嗓子哑了怎么办 小朋友嗓子哑了怎么办 4周岁宝宝拉肚子怎么办 小孩不肯拉小便怎么办 做销售不爱说话怎么办 我伤害了朋友怎么办 三岁发音不准怎么办 心里憋不住话怎么办 自己不长记性怎么办 孩子不愿意开口说话怎么办 孩子不爱开口说话怎么办 宝宝犟脾气不好怎么办 小孩说话不算话怎么办 孩子说话不算话怎么办 孩子故意不好好说话怎么办 小孩说话吐字不清楚怎么办 腿老是抽筋是怎么办 半夜睡觉脚抽筋怎么办 我不爱说话内向怎么办 小孩子吐字不清怎么办 宝宝前边头发少怎么办 宝宝咬嘴唇龅牙怎么办 小孩老是咬下唇怎么办 五月小孩掉下床怎么办 小孩说话夹舌头怎么办 小孩自闭不说话怎么办