zoukankan      html  css  js  c++  java
  • java基础篇6之代理

    代理的概念与应用

       Class clazzProxy = Proxy.getProxyClass(Collection.class.getClassLoader,Collection.class);
        clazzProxy.getName();
    
        Constructor[] Constructors = clazzProxy.getConstructors()
    
    
    
        动态生成类的内部代码
        Class Proxy{
            add(Object object){
                return handler.invoke(Object proxy,Method method,Object[] args);
            }
        }

    Client 程序调用objProxy.add("abc")方法时
    涉及三要素:objProxy对象,add方法,"abc"参数

         Collection proxy2 =(Collection)Proxy.newProxyInstance(
            Collection.class.getClassLoader(),
            new Class[]{Collection.class},
            new InvokeHandler(){
                ArrayList target = new ArrayList();
                public Object invoke(Object proxy,Method method,Object[] args){
                    long beginTime;
                    Object retVal = method.invoke(target,args);
                    return retVal;
                }
        });
    
        proxy2.add("zxx");

    方法中的内部类访问局部变量必须要加final

    实现AOP功能的封装与配置
      工厂类BeanFactory负责创建目标类或代理类的实例对象,
      并通过配置文件实现切换。其getBean方法根据参数字符串返回一个相应的实例
      对象,如果参数字符串在配置文件中对应的类名不是ProxyFactoryBean,
      则直接返回该类的实例对象,否则,返回该类实例对象的getProxy方法返回的对象

    BeanFactory的构造方法接收代表配置文件的输入流对象,配置文件格式如下
    #xxx=java.util.ArrayList
    xxx=cn.itcast.ProxyFactoryBean
    xxx.target=java.util.ArrayList
    xxx.advice=cn.itcast.MyAdvice

    ProxyFactoryBean充当封装生成动态代理的工厂,需要为工厂创建
    target和Advice

     

     

  • 相关阅读:
    Plug It In
    The King's Walk
    Water Testing 匹克定理
    基尔霍夫矩阵
    nginx 常用的命令
    Nginx window安装
    使用nrm管理 npm 镜像仓库
    window 安装node.js
    变量和数据类型
    同步,异步,阻塞,非阻塞
  • 原文地址:https://www.cnblogs.com/atomicbomb/p/6624410.html
Copyright © 2011-2022 走看看