当前位置:编程学习 > JAVA >>

java代理Demo——JDK动态代理

    java代理有jdk动态代理、cglib代理,这里只说下jdk动态代理,jdk动态代理主要使用的是java反射机制(既java.lang.reflect包)

    原理是(歌手、经纪人做例子):

         建立一个公共的接口,比如:歌手public inte易做图ce Singer;

        用具体的类实现接口,比如:周杰伦,他是歌手所以实现Singer这个类,class MySinger  implements Singer

        建立代理类,这里也就是经纪人,他需要实现InvocationHandler类,并重写invoke方法

     这样当有什么事情,要找周杰伦(具体类)的时候,就必须先到经纪人(代理类)那里处理,代理人在决定要不要与你见面(该方法要不要执行)

1、歌手接口

[java] 
public inte易做图ce Singer { 
     
    public abstract void sing(); 
     
    public abstract String s(); 

2、具体的歌手

[java] 
public class MySinger implements Singer { 
 
    public void sing() { 
        // TODO Auto-generated method stub 
        System.err.println("唱歌。。。。"); 
    } 
 

3、代理类(经纪人)

 

[java] 
public class agent implements InvocationHandler{ 
 
    public  Object target; 
     
    //绑定 
    public Object bind(Object target){ 
        this.target=target; 
        //必须放回Proxy 
        return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInte易做图ces(), this); 
    } 
     
    //重新 
    public Object invoke(Object proxy, Method method, Object[] args) 
            throws Throwable { 
        Object o =null; 
        System.out.println("开始事务"); 
        System.out.println("判断权限"); 
         
         o = method.invoke(target, args);//执行方法 
     
        System.out.println("结束事务"); 
        return o; 
    } 
 

 


 

4、测试(为什么要间接口能,下面你会发现代理返回的是他们的接口类,这要一个代理类,就可以代理多个类,只要该类是同个一个接口的是实现)

[java] 
public class Test { 
    public static void main(String[] args) { 
        // 
        agent a =new agent(); 
        Singer s= (Singer) a.bind(new MySinger()); 
        s.sing(); 
    } 

 

 

由于本人还有半年毕业给自己做个小宣传,莫吐槽,谢谢!!!

name:牟云飞

tel:15562579597

email:www.zzzyk.com
address:山东中医药大学理工学院

 time:2012-11-27

 

 

 

 

补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,