动态代理

来源:互联网 发布:shell编程视频教程 编辑:程序博客网 时间:2024/06/05 03:38
动态代理:
1.得到代理对象
第一个参数:类加载器器
   ClassLoader loader = Demo.class.getClassLoader();
第二个参数:被增强类的接口数组: Person,SuperPerson是Man的接口:man.getInterfaces()
   Class[] cs = {Person.class,SuperPerson.class};
第三个参数:InvocationHandler接口,
 1.可以使用匿名内部类的得到处理类对象
 InvocationHandler  hd  = new InvcationHandler(){
public Object invoke(Object proxy,Method mthod,Object[] args){

}
  };
 2.可以同过实现处理接口的方式,得到处理类对象


  public MyHandler  implements InvocationHandler{
  
public Object invoke(Object proxy,Method mthod,Object[] args){
method.invoke(被增强类的对象,方法参数);
}
  
  }
   
Objec  objProxy  =  Proxy.newProxyInstance(loader,interfaces,invocationHandler);


2.明确处理类中invoke方法的三个参数分别表示什么:
   第一个参数:Object proxy   表示代理对象
   第二个参数: Method method 表示被增强类的方法对象
   第三个参数:Object[] args  表示被增强类中的方法里面的参数
  
3.动态代理具体是怎么执行的:
   Object proxy =----;//代理对象
   Person p = (Person)proxy;// 代理对象
   p.eat();
   调用代理对象的方法,
   1.第一步:步骤,去执行处理类中的invoke方法
   2.第二步:步骤,在处理类中,调用了method.invoke方法,其实执行的被增强类中的方法。
   动态代理的执行过程:
    调用代理类对象的方法------>
--->执行处理类中的invoke方法,在invoke方法里面,执行method对象方法
       ---->被增强类中的方法





























原创粉丝点击