手机
当前位置:查字典教程网 >编程开发 >Java >java代理 jdk动态代理应用案列
java代理 jdk动态代理应用案列
摘要:java代理有jdk动态代理、cglib代理,这里只说下jdk动态代理,jdk动态代理主要使用的是java反射机制(既java.lang.r...

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();

}

}

【java代理 jdk动态代理应用案列】相关文章:

java 代码中预防空指针异常的处理办法

java线程之线程的生命周期的使用

java集合框架 arrayblockingqueue应用分析

Java直接插入排序算法实现

java动态代理(jdk与cglib)详细解析

java类型生命周期的详细解析

java中Scanner类的简单用法分享

java el简介及用法

java 静态代理 动态代理深入学习

java多线程入门知识及示例程序

精品推荐
分类导航