源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-10-30 20:56 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:java代理 jdk动态代理应用案列
java代理有jdk动态代理、cglib代理,这里只说下jdk动态代理,jdk动态代理主要使用的是java反射机制(既java.lang.reflect包) 原理是(歌手、经纪人做例子): 建立一个公共的接口,比如:歌手public interface Singer; 用具体的类实现接口,比如:周杰伦,他是歌手所以实现Singer这个类,class MySinger implements Singer 建立代理类,这里也就是经纪人,他需要实现InvocationHandler类,并重写invoke方法 这样当有什么事情,要找周杰伦(具体类)的时候,就必须先到经纪人(代理类)那里处理,代理人在决定要不要与你见面(该方法要不要执行) 1、歌手接口
[u]复制代码[/u] 代码如下:
public interface Singer { public abstract void sing(); public abstract String s(); }
2、具体的歌手
[u]复制代码[/u] 代码如下:
public class MySinger implements Singer { public void sing() { // TODO Auto-generated method stub System.err.println("唱歌。。。。"); } }
3、代理类(经纪人)
[u]复制代码[/u] 代码如下:
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、测试(为什么要间接口能,下面你会发现代理返回的是他们的接口类,这要一个代理类,就可以代理多个类,只要该类是同个一个接口的是实现)
[u]复制代码[/u] 代码如下:
public class Test { public static void main(String[] args) { // agent a =new agent(); Singer s= (Singer) a.bind(new MySinger()); s.sing(); } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部