zoukankan      html  css  js  c++  java
  • Java 基于接口的动态代理

    UserDao接口

    package com.pry.cn;
    
    public interface UserDao {
        public int add(int a,int b);
        public String update(String id);
    }
    

      

    UserDao实现类

    package com.pry.cn;
    
    public class UserDaoImpl implements UserDao {
        @Override
        public int add(int a, int b) {
            System.out.println("add方法执行了");
            return a + b;
        }
    
        @Override
        public String update(String id) {
            System.out.println("update方法执行了");
            return id;
        }
    }
    

      

    代理实现方法

    class UserDaoProxy implements InvocationHandler {
        private Object obj;
    
        public UserDaoProxy(Object obj) {
            this.obj = obj;
        }
    
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            System.out.println("增强方法执行前:" + method.getName() + "参数:" + Arrays.toString(args));
            Object res = method.invoke(obj, args);
            System.out.println("增强方法执行后:" + obj);
            return res;
        }
    }
    

      

    执行对象

    public class MainRum {
        public static void main(String[] args) {
            Class[] interfaces = {UserDao.class};
            UserDaoImpl userDao = new UserDaoImpl();
            UserDao dao = (UserDao) Proxy.newProxyInstance(MainRum.class.getClassLoader(), interfaces, new UserDaoProxy(userDao));
            dao.add(2, 6);
        }
    }
    

      

    输出结果

    增强方法执行前:add参数:[2, 6]
    add方法执行了
    增强方法执行后:com.pry.cn.UserDaoImpl@2503dbd3
    

      

  • 相关阅读:
    51Nod1528 加号分配
    51Nod1679 连通率
    51Nod1679 连通率
    51Nod1426 沙拉酱括号
    51Nod1426 沙拉酱括号
    51Nod1678 lky与gcd
    51Nod1556 计算
    c学习第2天
    Stopwatch秒表的使用
    数据从.txt文件中导入数据库
  • 原文地址:https://www.cnblogs.com/MineLSG/p/13290443.html
Copyright © 2011-2022 走看看