代理的概念与应用

   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

 java基础篇6之代理

 

 

 

相关文章:

  • 2021-12-30
  • 2022-12-23
  • 2021-06-08
  • 2021-11-26
  • 2022-01-17
  • 2021-06-27
  • 2021-06-21
  • 2021-05-30
猜你喜欢
  • 2022-01-09
  • 2021-07-29
  • 2021-03-31
  • 2021-06-24
  • 2021-12-30
  • 2021-11-23
  • 2021-12-22
相关资源
相似解决方案