zoukankan      html  css  js  c++  java
  • 【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

  • 相关阅读:
    关于链表的代码
    c++中的友元函数
    javaweb笔记全套
    包装类、object、单例模式、final、抽象类
    Linux变量内容的删除、代替与替换
    2014年工作中遇到的20个问题:181-200
    Qt中 QString 和int,double等的转换
    jsp学习笔记总结
    工作日志2014-07-04
    Maple入门使用教程
  • 原文地址:https://www.cnblogs.com/gossip/p/14545512.html
Copyright © 2011-2022 走看看