A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李栋梁 中级黑马   /  2012-11-21 15:33  /  1230 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//java的动态代理 Proxy.newProxyInstance()方法的几个参数到底是什么意思的?
public class Client
{
public static void main(String[] args)
{
  RealSubject realSubject = new RealSubject();
  
  
  Class<?> classType = realSubject.getClass();
  Subject subject = (Subject) Proxy.newProxyInstance(
    classType.getClassLoader(), new Class[] { Subject.class },
    new DynamicSubject(realSubject));
  subject.request();
  System.out.println(subject.getClass());
}
}

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

1 个回复

倒序浏览
(1)loader:每个代理来都需要一个类装载器去加载这个代理类。
(2)interfaces:要想实现动态代理,被代理对象必须实现一个或多个接口,只有这样的类才能被代理,代理类要实现与被代理相同的接口
(3)h:生成的代理对象的方法里干什么事,例如,向进行进行权限管理、日志、事务等等,有开发人员编写handler接口的实现来指定。
例如:我们我们定义一个类Actor
public class Vector implements Person{
public void sing(){
System.out.println("演员唱歌");
}
public void dance(){
System.out.println("演员跳舞");
}
}
上面的类的功能不能满足我们的需求,我们需要加入系统的功能,就需要动态代理了
要动态代理,被代理对象必须实现接口
package com.heima.reflect;
public interface Person {
public abstract void sing();
public abstract void dance();
}
//需要一个目标类(被代理对象)
Vector v=new Vector();
//生成代理类
/**
   第一个参数:类加载器:一般用实现接口的类加载器
   第二个参数:代理类实现的接口(就是我们上面定义的Person了)
   第三个参数:我们生成的代理对象要干什么事。
*/
Proxy.newProxyInstance(v.getClass().getClassLoader(),v.getClass().getInfaces(),new InvocationHandler(){
        
  public Object invoke(Object proxy, Method method, Object[] args){
            //这里面就可以添加我们的系统功能了
  }

})

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马