java动态代理--代理接口无实现类
转载:https://blog.csdn.net/weixin_45674354/article/details/103246715
1.接口定义:
package cn.proxy;
public interface IHello {
String say(String aa);
}
2.代理实现
package cn.proxy; import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy; /**
* JDK动态代理代理类
*
*/
@SuppressWarnings("unchecked")
public class FacadeProxy implements InvocationHandler {
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("接口方法调用开始");
//执行方法
System.out.println("method toGenericString:"+method.toGenericString());
System.out.println("method name:"+method.getName());
System.out.println("method args:"+(String)args[0]);
System.out.println("接口方法调用结束");
return "调用返回值";
} public static <T> T newMapperProxy(Class<T> mapperInterface) {
ClassLoader classLoader = mapperInterface.getClassLoader();
Class<?>[] interfaces = new Class[]{mapperInterface};
FacadeProxy proxy = new FacadeProxy();
return (T) Proxy.newProxyInstance(classLoader, interfaces, proxy);
}
3.运行
package cn.proxy;
public class Test {
public static void main(String[] args) {
IHello hello = FacadeProxy.newMapperProxy(IHello.class);
System.out.println(hello.say("hello world"));
}
}
4.运行结果
接口方法调用开始
method toGenericString:public abstract java.lang.String cn.proxy.IHello.say(java.lang.String)
method name:say
method args:hello world
接口方法调用结束
调用返回值
java动态代理--代理接口无实现类的更多相关文章
- 利用Java提供的Observer接口和Observable类实现观察者模式
对于观察者模式,其实Java已经为我们提供了已有的接口和类.对于订阅者(Subscribe,观察者)Java为我们提供了一个接口,JDK源码如下: package java.util; public ...
- java学习——JDK1.8接口和实现类
Java 8 新特性:接口的静态方法和默认方法 https://blog.csdn.net/sun_promise/article/details/51220518 接口的默认方法和静态方法 http ...
- Java学习笔记_22_Set接口的实现类
22.Set接口的实现类: Set接口存放的元素是无序的且不包括反复元素. 1>实现类HashSet: HashSet类依据元素的哈希码进行存放,取出时也能够依据哈希码高速找到.HashSet不 ...
- java 多线程:Callable接口;FutureTask类实现对象【Thread、Runnable、Callable三种方式实现多线程的区别】
Callable接口介绍: Java5开始,Java提供了Callable接口,像是Runnable接口的增强版,Callable接口提供了一个 call()方法可以作为线执行体. call()方法比 ...
- Java并发编程:Future接口、FutureTask类
在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果. 如果需要获取执行结果,就 ...
- Java中使用Observer接口和Observable类实践Observer观察者模式
在Java中通过Observable类和Observer接口实现了观察者模式.实现Observer接口的对象是观察者,继承Observable的对象是被观察者. 1. 实现观察者模式 实现观察者模式非 ...
- Mybatis动态构建Sql(无实体类)
MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑. 例如,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空,此时查询 ...
- Java动态代理(一)动态类Proxy的使用
1.什么是动态代理? 答:动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实.代理一般会实现它所表示的实际对象的接口.代理可以访问实际对象,但是延迟实现实际对象的部分功能,实际对象实现系统 ...
- 43、Java动态代理一——动态类Proxy的使用
1.什么是动态代理? 答:动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实.代理一般会实现它所表示的实际对象的接口.代理可以访问实际对象,但是延迟实现实际对象的部分功能,实际对象实现系统 ...
随机推荐
- 关于Linux操作系统的命令行文件拷贝
关于Linux操作系统的命令行文件拷贝 起因:服务器的加密狗秘钥过期导致无法使用服务,需要将服务器里面的秘钥文件发送给授权人员.本以为十分容易,打开服务器,图形界面点击发送即可.没想到服务器的界面是命 ...
- tomcat 配置https证书 ssl
修改tomcat-conf-server.xml,原配置文件是 <Connector connectionTimeout="20000" port="8080&qu ...
- jmeter重点(详细)
之前,写过一篇文章:jmeter,学这些重点就可以了,今天就来把一些重点细节点说一下. 测试计划 可以理解为各种测试元件的容器 其中: 定义整个测试中使用的重复值(全局变量),一般定义服务器的ip.端 ...
- Ibgreslock漏洞利用
- Renix软件如何添加VLAN头部——网络测试仪实操
一.添加VLAN头部 打开Renix软件,连接机箱, 预约端口 添加VLAN头部,选中"IPv4 Header"右键选择"Insert Before",会弹出& ...
- RENIX报文字段跳变——网络测试仪实操
什么是报文字段跳变? 报文字段跳变是指字段的值进行一些列有规则的变化,Renix支持对字段进行递增.递减.列表和随机变化. 如当用户想要仿真大量的源IP变化的数据时,就可以使用Modifier进行规则 ...
- HDFS成员的工作机制
NameNode工作机制 nn负责管理块的元数据信息,元数据信息为fsimage和edits预写日志,通过edits预写日志来更新fsimage中的元数据信息,每次namenode启动时,都会将磁盘中 ...
- 【C# Task】System.Threading.Channels 生产者和消费者模式
前言 今天给大家分享一个微软官方的生产者/消费者方案的特性解决:Channel. Channel在% dotnet add package System.Threading.Channels 而在Co ...
- 【C# 线程】数据槽 LocalDataStoreSlot简称DataSlot
背景 为了确保在线程中声明特定类型的变量,在每个线程中的值都是唯一的,不受到其他线程对该变量读写的影响.也就是俗称的线程本地存储 (TLS),可用于存储对线程和应用程序域唯一的数据. 例如:主线程中声 ...
- python3中map()函数用法
python源码解释如下:map(func, *iterables) --> map objectMake an iterator that computes the function usin ...