• day39-Spring 03-JDK的动态代理


    package cn.itcast.spring3;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    /**
     * JDK的动态代理的机制
     * @author zhongzh
     *
     */
    public class JDKProxy implements InvocationHandler{//写了一个代理对象
         private UserDao userDao;//持有被代理对象的引用
    
        public JDKProxy(UserDao userDao) {//在构造的时候传入被代理对象
            super();
            this.userDao = userDao;
        }
        public  UserDao createProxy(){//对接口生成代理,返回被代理接口的代理
            UserDao proxy = (UserDao) Proxy.newProxyInstance(userDao.getClass().getClassLoader(), userDao.getClass().getInterfaces(), this);//InvocationHandler这里也可以使用匿名内部类
            
            return proxy;
            
        }
        //调用目标对象的任何一个方法都相当于调用invoke();这个方法都会执行.
        public Object invoke(Object proxy, Method method, Object[] args)
                throws Throwable {
            // TODO Auto-generated method stub
            if("add".equals(method.getName())){//增强add()方法
                //记录日志
                System.out.println("日志记录=============================================");//如果方法名是add(),记录日志
                 Object result = method.invoke(userDao, args);//记录日志之后执行添加用户的代码
                 //如果是add()方法那么在add()方法之前做了一个事情然后才执行add()方法.
                 return result;
            }
            return method.invoke(userDao, args);
        }
    }
    package cn.itcast.spring3;
    /**
     * DAO的接口
     * @author zhongzh
     *
     */
    public interface UserDao {
        public void add();
        public void update();
        
    }
    package cn.itcast.spring3;
    
    public class UserDaoImpl implements UserDao {
    
        public void add() {
            // TODO Auto-generated method stub
            System.out.println("添加用户....");
        }
    
        public void update() {
            // TODO Auto-generated method stub
             System.out.println("修改用户.....");
        }
    
    }
    package cn.itcast.spring3;
    
    import org.junit.Test;
    
    public class SpringTest1 {
        @Test
        public void demo1(){
            UserDao userDao = new UserDaoImpl();
            userDao.add();
            userDao.update();
        }
        @Test
        public void demo2(){
            UserDao userDao = new UserDaoImpl();
            UserDao proxy = new JDKProxy(userDao).createProxy();
            proxy.add();
            proxy.update();
    }
    }

  • 相关阅读:
    学习比较-列表
    查看Linux下系统资源占用常用命令
    eclipse加载maven工程提示pom.xml无法解析org.apache.maven.plugins:maven-resources-plugin:2.4.3解决方案
    springmvc 注解扫描失败的可能原因
    单例模式:懒加载(延迟加载)和即时加载
    nginx 正向代理和反向代理
    LINUX中错误 SELinux is disabled
    修改Win10默认窗口背景色为护眼色的方法
    搜索引擎之Lucene
    MongoDB系列(一):MongoDB安装及基础语法
  • 原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/6773652.html
Copyright © 2020-2023  润新知