• JDK动态代理的简单理解


    转载:http://www.cnblogs.com/luotaoyeah/p/3778183.html

    动态代理

      代理模式是 Java 中的常用设计模式,代理类通过调用被代理类的相关方法,提供预处理、过滤、事后处理等服务,动态代理及通过反射机制动态实现代理机制。JDK 中的 java.lang.reflect.Proxy 类可以用来实现动态代理。

    首先,准备一个简单的接口和实现类

    /**
     * 接口 IHello.java
     */
    public interface IHello {
        void hello();
    }
    /**
     * 实现类 Hello.java
     */
    public class Hello implements IHello {
        @Override
        public void hello() {
            System.out.println("我是Hello.");
        }
    }
    

    通过 Proxy 实现动态代理

    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    import org.junit.Test;
    
    public class HelloTest {
        @Test
        public void testProxy() throws Exception {
            final IHello hello = new Hello();
    
            /*
             * proxyHello    : 代理主题角色,代理类的实例 
             * IHello        : 抽象主题角色,代理类和被代理类都需要实现的接口,JDK中的动态代理必须针对接口
             * hello         : 真实主题角色,被代理类的实例
             */
            IHello proxyHello = (IHello) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
                    new Class[] { IHello.class }, new InvocationHandler() {
    
                        /*
                         * @param proxy : 当前代理类的一个实例; 若在invoke()方法中调用proxy的非final方法,将造成无限循环调用.
                         */
                        @Override
                        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    
                            // 前置的业务逻辑操作
                            System.out.println("---开始");
    
                            // 调用被代理类的方法,传入参数args,得到返回
                            Object object = method.invoke(hello, args);
    
                            // 后置的业务逻辑操作
                            System.out.println("---结束");
    
                            return object;
                        }
                    });
    
            proxyHello.hello();
        }
    }
    

      

  • 相关阅读:
    PyTorch学习笔记之Variable_and_function_cat
    PyTorch学习笔记之DataLoaders
    PyTorch学习笔记之nn的简单实例
    PyTorch学习笔记之Tensors 2
    PyTorch学习笔记之Tensors
    webdriver定位元素
    Python面向对象、继承和多态
    python中json文件处理涉及的四个函数json.dumps()和json.loads()、json.dump()和json.load()的区分
    Python定义类时为什么要继承object类
    Python数据类型
  • 原文地址:https://www.cnblogs.com/564085446java/p/5192182.html
Copyright © 2020-2023  润新知