• 【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

  • 相关阅读:
    shell (check return of each line)(PIPESTATUS[@])and sudoer
    mysql slow query---pt-query-digest----db structure consistency,monitor table records before and after transaction.
    http://www.ibm.com/developerworks/cn/web/wa-aj-jsonp1/index.html
    PHP数据过滤
    PHP二维数组排序函数
    LBS配置
    jQuery+Ajax+PHP+Mysql实现分页显示数据
    流量高,资费贵。且用且珍惜
    jQuery实现的全选、反选和不选功能
    jquery 点点滴滴小记
  • 原文地址:https://www.cnblogs.com/gossip/p/14545512.html
Copyright © 2020-2023  润新知