广

Java编程

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    java代理 jdk动态代理应用案列

    2018-11-02 13:12:20 次阅读 稿源:互联网
    零七广告
    java代理有jdk动态代理、cglib代理,这里只说下jdk动态代理,jdk动态代理主要使用的是java反射机制(既java.lang.reflect包)
    原理是(歌手、经纪人做例子):
    建立一个公共的接口,比如:歌手public interface Singer;
    用具体的类实现接口,比如:周杰伦,他是歌手所以实现Singer这个类,class MySinger implements Singer
    建立代理类,这里也就是经纪人,他需要实现InvocationHandler类,并重写invoke方法
    这样当有什么事情,要找周杰伦(具体类)的时候,就必须先到经纪人(代理类)那里处理,代理人在决定要不要与你见面(该方法要不要执行)
    1、歌手接口
    代码如下:

    public interface Singer {

    public abstract void sing();

    public abstract String s();
    }

    2、具体的歌手
    代码如下:

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

    3、代理类(经纪人)
    代码如下:

    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().getInterfaces(), 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、测试(为什么要间接口能,下面你会发现代理返回的是他们的接口类,这要一个代理类,就可以代理多个类,只要该类是同个一个接口的是实现)
    代码如下:

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

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七广告
    零七广告
    零七广告
    零七广告