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
    

      

  • 相关阅读:
    LIB和 DLL区别
    C++ STL总结
    浅谈static和extern关系
    死锁及处理
    函数模板与模板函数
    Linux无法启动httpd_正在启动httpd
    httpd不允许远程连接问题
    虚拟机UUIDexist_更改UUID
    MySQL远程连接丢失问题
    Apache服务端允许跨域
  • 原文地址:https://www.cnblogs.com/MineLSG/p/13290443.html
Copyright © 2011-2022 走看看