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

     

     

  • 相关阅读:
    [ZJOI2006]书架
    [NOI2005]维护数列
    Python 最佳实践
    python中使用多继承
    python 抽象类、抽象方法的实现
    30个有关Python的小技巧
    一行 Python 实现并行化 -- 日常多线程操作的新思路
    python日志模块logging
    在Python中怎么表达True
    有趣的库:pipe(类似linux | 管道)库
  • 原文地址:https://www.cnblogs.com/atomicbomb/p/6624410.html
Copyright © 2011-2022 走看看