• 设计模式---动态代理模式


    动态代理模式:
    
        作用:在不改变源码的情况下,对现有的方法进行增强。
        
        代码演示;
        
        1.一个接口:
            public interface Printer {
                void print();
            }
            
        2.一个实现类:被增强类
            public class PrinterImpl implements Printer {
                public void print(){
                    System.out.println("打印机打印。。。");
                }
            }
            
        3.目标代理类:实现InvocationHandler接口
            public class TargetProxy implements InvocationHandler {
    
                //被代理的对象
                private Object targetObject;
    
    
                /**
                 *
                 *   ClassLoader loader,  被代理类的类加载器
                 *   Class<?>[] interfaces, 被代理类的所有接口
                 *   InvocationHandler h  实现了InvocationHandler的类
                 */
                public Object newProxyInstance(Object targetObject){
                    this.targetObject=targetObject;
                    return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
                            targetObject.getClass().getInterfaces(),
                            this); //真正的代理类
                }
                @Override
                public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                    System.out.println("日志记录");
                    // obj: 调用方法的对象
                    // args: 方法的参数
                    method.invoke(targetObject, args);
    
    
                    System.out.println("日志保存");
                    return null;
                }
            }
            
        4.测试
            public class ProxyTest {
                public static void main(String[] args) {
                    TargetProxy targetProxy = new TargetProxy();
                    Printer printer = (Printer)targetProxy.newProxyInstance(new PrinterImpl());
                    printer.print();
                }
            }
            
            
            
            
            
            
            
    
        
  • 相关阅读:
    方法
    数组
    Scanner类+Random
    运算符2
    运算符1
    Linux中Oracle的安装
    redis安装常见错误
    redis常用命令
    Linux中redis安装
    修改Oracle字符集
  • 原文地址:https://www.cnblogs.com/lyle-liu/p/12754867.html
Copyright © 2020-2023  润新知