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

 

 

原文地址:https://www.cnblogs.com/atomicbomb/p/6624410.html