java代理 jdk * 应用案列

时间:2023-02-17 10:08:55 

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();
}
}
标签:jdk ,
0
投稿

猜你喜欢

  • Android动态修改ToolBar的Menu菜单示例

    2021-10-29 15:36:07
  • 详解java并发之重入锁-ReentrantLock

    2021-08-03 03:58:08
  • SpringBoot文件上传大小设置方式(yml中配置)

    2021-09-21 09:26:47
  • JAVA 获取系统当前时间实例代码

    2022-09-01 05:53:01
  • 如何调用chatGPT实现代码机器人

    2023-06-05 02:09:33
  • C#对多个集合和数组的操作方法(合并,去重,判断)

    2021-12-11 14:02:44
  • Android DownloadProvider 源码详解

    2023-02-11 03:26:17
  • Android RecyclerView缓存复用原理解析

    2022-04-29 10:51:03
  • maven私服搭建与使用教程

    2022-05-09 06:23:56
  • Android实现随手指移动小球

    2021-06-03 23:38:46
  • c#得到本月有几周和这几周的起止时间示例代码

    2022-11-01 15:20:34
  • 一篇文章带你了解C语言二分查找

    2023-10-16 19:51:57
  • Spring boot多线程配置方法

    2022-12-14 21:02:02
  • C#基于TimeSpan实现倒计时效果的方法

    2021-10-19 00:06:04
  • SpringMVC执行步骤、Model的使用详解

    2022-02-13 05:38:45
  • c#生成验证码程序

    2023-01-08 18:38:59
  • spring使用OXM进行对象XML映射解析

    2022-11-11 16:05:19
  • Java同步函数代码详解

    2022-10-13 23:22:03
  • 解决Java中的java.io.IOException: Broken pipe问题

    2022-01-24 00:40:34
  • Android巧用ActionBar实现tab导航效果

    2022-06-02 05:49:18
  • asp之家 软件编程 m.aspxhome.com