zoukankan      html  css  js  c++  java
  • 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();
    }
    }

  • 相关阅读:
    查看另外一台服务器的版本号
    制作数据集(二)
    制作数据集(一)
    中文分词工具包 PKUSeg
    Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend)
    修改主机名
    例题
    Oracle基本使用
    Linux里面的MySQL忘记密码RROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
    SpringBoot2.x以上配置schema.sql脚本
  • 原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/6773652.html
Copyright © 2011-2022 走看看