• 【Java】JDK动态代理


    一. JDK动态代理示例

    1. 接口

    public interface UserService {
        void addUser(String name);
        String getUser(String name);
    }
    

    2. 被代理对象

    public class UserServiceImpl implements UserService {
    
        public void addUser(String name) {
            System.out.println("add user into database.");
        }
        
        public String getUser(String name) {
            
            System.out.println("getUser from database.");
            return name;
        }
    }
    
    

    3. 代理工具类

    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    public class ProxyUtil implements InvocationHandler {
    
        private Object target ;//需要代理的目标对象
        
        //定义获取代理对象方法
        public Object getProxy(Object targetObject){
        
            this.target = targetObject;
            
            //JDK动态代理只能针对实现了接口的类进行代理
            return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), targetObject.getClass().getInterfaces(), this);
        }
        
        
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        
            System.out.println("JDK动态代理前置逻辑");
            
            Object result = method.invoke(target, args);
            
            System.out.println("JDK动态代理后续逻辑");
            return result;
        }
    }
    
    

    4. 使用代理类

    import java.lang.reflect.Proxy;
    
    public class ProxyTest {
    
        public static void main(String[] args){
        
            // 被代理的对象
            UserServiceImpl userServiceImpl = new UserServiceImpl();    
            
            // 生成代理对象
            UserService userService = (UserService)new ProxyUtil().getProxy(userServiceImpl);
            
            userService.getUser("1");
            userService.addUser("1");
        }
    }
    
    

    5. 执行结果

    JDK动态代理前置逻辑
    getUser from database.
    JDK动态代理后续逻辑
    
    JDK动态代理前置逻辑
    add user into database.
    JDK动态代理后续逻辑
    
    

    二. JDK动态代理说明

    1. 获取代理对象:ProxyUtil.getProxy

    2. 调用代理方法:ProxyUtil.invoke

  • 相关阅读:
    TestNG(二)
    TestNG(一)
    设计模式(一)单例模式
    Locust学习笔记1-性能工具的选择
    使用postman工具做接口测试(七)——全局(Global)变量和环境(Environment)变量的使用
    使用postman工具做接口测试(六)——post 请求(application/json和application/x-www-from-urlencoded)
    接口测试理论
    使用Postman工具做接口测试(五)——生成随机参数
    MyBatis-Plus 构建查询条件说明
    win10解决端口被占用问题
  • 原文地址:https://www.cnblogs.com/gossip/p/14545512.html
Copyright © 2020-2023  润新知