java代理 jdk * 应用案列
发布时间:2023-02-17 10:08:55
标签:jdk ,
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();
}
}
0
投稿
猜你喜欢
- 布隆过滤器原理很简单:就是把一个字符串哈希成一个整数key,然后选取一个很长的比特序列,开始都是0,在key把此位置的0变为1;下次进来一个
- 概述JDK的bin目录下提供了很多命令工具,比如java.exe,javap.exe,javac.exe。。。。。。这些命令由jdk/lib
- 本文是精讲RestTemplate第6篇,前篇的blog访问地址如下:RestTemplate在Spring或非Spring环境下使用精讲R
- java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用
- 一、问题在哪里?问题来源于app开发中一个很常见的场景——用户头像要展示成圆的: 二、怎么
- 1. 字段取别名,和属性名保持一致映射文件<mapper namespace="com.atguigu.mybatis.ma
- 新建两个工程,一个客户端,一个服务端,先启动服务端再启动客户端两个工程的读写操作线程类基本上完全相同服务端:import java.io.B
- 当我们开发spring web应用程序时,对于如 IOException , ClassNotFoundException 之类的检查异常,
- 摘要分析验证码素材图片混淆原理,并采用selenium模拟人拖动滑块过程,进而破解验证码。人工验证的过程1、打开威锋网注册页面2、移动鼠标至
- 十进制整数与其他进制的字符串之间的转换。c#中十六进制用前缀0x表示。int c = 0x1000;一、利用Convert.ToString
- IDEA安装后,前进 后退快捷按钮默认不在工具栏显示,需要手动将其添加到工具栏*按照图一选中Toolbar Run Actions ,点击右
- 接触过Android开发的同学们都知道在Android中访问程序资源基本都是通过资源ID来访问。这样开发起来很简单,并且可以不去考虑各种分辨
- 前言大家或许在iOS程序开发中经常遇到屏幕旋转问题,比如说希望指定的页面进行不同的屏幕旋转,但由于系统提供的方法是导航控制器的全局方法,无法
- 本文实例为大家分享了Opencv实现画笔功能的具体代码,供大家参考,具体内容如下#include<iostream>#inclu
- 问题描述:在windows系统下,idea中,操作terminal控制台,使用git log查看日志时,出现如下乱码为什么参考网上很多的gi
- 前言Java17将是一个长期支持的LTS版本。Java采用了6个月的发布周期。也就是说,它将每6个月发布一个新版本的Java。每隔3年,LT
- 一、Socket 基础知识1.1 Socket 概述Socket 指的是“插座”,是应用层与传输层之
- 1.基本语法key: value;kv之间有空格大小写敏感使用缩进表示层级关系缩进不允许使用tab,只允许空格缩进的空格数不重要,只要相同层
- CollectionUtils.isNotEmpty()不存在问题org.apache.commons.collections.Collec
- JavaFx中其实也可以直接使用字体图标iconfont的,只需要加载ttf字体文件,之后设置unicode即可,具体可以看我给出的代码既然