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

     

     

  • 相关阅读:
    SpringMVC源码分析--HandlerMappings
    你真的懂wait、notify和notifyAll吗
    深入理解DefaultMessageListenerContainer
    起步
    ZOJ 3827 Information Entropy (2014牡丹江区域赛)
    Spring简化配置
    对于一个IE8兼容性问题的反思
    xcode7.1.1不能真机调试ios9.2系统设备的解决方法
    CSS3怎样实现超出指定文本以省略号显示效果
    网易2016年研发project师编程题(2)
  • 原文地址:https://www.cnblogs.com/atomicbomb/p/6624410.html
Copyright © 2011-2022 走看看