jdk动态代理 案例
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
interface Person1 {
public String eat();
public String drink();
}
class Kid implements Person1{
public String name;
public Kid(String name) {
this.name=name;
}
public String eat() {
System.out.println("kids are eating!");
return this.name;
}
public String drink() {
System.out.println("kids are drinking!");
return this.name;
} }
class MyInvocationHandler<T> implements InvocationHandler{
//被代理对象
private T target;
public MyInvocationHandler(T target){
this.target=target;
}
/**
*
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result;
if("eat".equals(method.getName())) {
System.out.println("洗手");
result = method.invoke(target, args);
System.out.println("刷碗");
}else {
result = method.invoke(target, args);
}
return result; //反射方法的返回值
} }
public class ProxyDemos {
public static void main(String[] args) throws NoSuchMethodException, SecurityException, Throwable {
Person1 p=new Kid("小王");
MyInvocationHandler<Person1> handle=new MyInvocationHandler<Person1>(p);
Person1 kid=(Person1) Proxy.newProxyInstance(Person1.class.getClassLoader(), new Class<?>[]{Person1.class}, handle);
System.out.println(kid.eat());
System.out.println("--------------------");
System.out.println(kid.drink());
}
}
Output:
洗手
kids are eating!
刷碗
小王
--------------------
kids are drinking!
小王
jdk动态代理 案例的更多相关文章
- JDK动态代理案例与原理分析
一.JDK动态代理实现案例 Person接口 package com.zhoucong.proxy.jdk; public interface Person { // 寻找真爱 void findlo ...
- JDK动态代理与Cglib库
JDK动态代理 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在 ...
- jdk动态代理举例
JDK动态代理是基于接口的代理,下面举例说明 代理类:proxy,代理动作必须要基于一个proxy实例来执行 代理执行类:实现InvocationHandler,案例中是TestInvocationH ...
- SSM-Spring-09:Spring中jdk动态代理
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- JDK动态代理: 为何叫JDK动态代理呢? 所谓JDK,jdk是java开发工具包,它里面包含了一个动态代理的 ...
- JDK动态代理深入理解分析并手写简易JDK动态代理(下)
原文同步发表至个人博客[夜月归途] 原文链接:http://www.guitu18.com/se/java/2019-01-05/27.html 作者:夜月归途 出处:http://www.guitu ...
- 设计模式之jdk动态代理模式、责任链模式-java实现
设计模式之JDK动态代理模式.责任链模式 需求场景 当我们的代码中的类随着业务量的增大而不断增大仿佛没有尽头时,我们可以考虑使用动态代理设计模式,代理类的代码量被固定下来,不会随着业务量的增大而增大. ...
- 代理模式(静态代理、JDK动态代理原理分析、CGLIB动态代理)
代理模式 代理模式是设计模式之一,为一个对象提供一个替身或者占位符以控制对这个对象的访问,它给目标对象提供一个代理对象,由代理对象控制对目标对象的访问. 那么为什么要使用代理模式呢? 1.隔离,客户端 ...
- SpringBoot27 JDK动态代理详解、获取指定的类类型、动态注册Bean、接口调用框架
1 JDK动态代理详解 静态代理.JDK动态代理.Cglib动态代理的简单实现方式和区别请参见我的另外一篇博文. 1.1 JDK代理的基本步骤 >通过实现InvocationHandler接口来 ...
- JavaSE---使用反射生成JDK动态代理
1.概述 1.1 在Java.lang.reflect包下,提供了Proxy类.InvocationHandler接口,使用它们可以生成JDK动态代理类或动态代理对象: 1.2 [Proxy类] 1. ...
随机推荐
- 如何使用C#程序给PDF文件添加编辑域
PDF文档通常是不能编辑的,但有些时候需要在PDF文档中填写日期或签名之类,就需要在PDF有能编辑的文本域,本文介绍怎样用C#来实现这一功能. 环境 工具:VS2015 语言:C# 操作PDF类库:i ...
- k8s实战
wget https://github.com/coreos/etcd/releases/download/v2.2.0/etcd-v2.2.0-linux-amd64.tar.gz etcd -na ...
- SIEBEL GET最新时提示表异常
无法GET最新,则将此表GET一次,CHECK OUT下来,再UNDO CHECK IN即可
- CTC 的工作原理
CTC 的工作原理 Fig. 1. How CTC combine a word (source: https://distill.pub/2017/ctc/) 这篇文章主要解释CTC 的工 ...
- wcf 调试
1>在开发环境中调试,我们先在WCF服务上将服务Serivce1.svc设置为启动页面 然后在WCF上Debug中启动新实例 服务就启动起来了 2>wcf发布以后调试,只需在Visual ...
- Red Hat 系列如何快速定制二进制内核 RPM 包?
随着Linux服务器越来越多了,底层系统内核想要保持版本统一就需要定制专门的二进制安装包来便捷的升级和管理. RedHat系那当然就是使用rpmbuild来做定制化管理了. 今天我们分俩个部分(roo ...
- java 框架收藏
一.java 异步非阻塞编程框架 1.Spring Webflux 2.Vert.x 3.Ratpack 4.smart-socket 国产异步框架 二.微服务框架 1.Jboot :专为大型分布式项 ...
- python动态捕获异常-乾颐堂
在讨论动态捕获异常时让我大吃一惊的是,可以让我找到隐藏的Bug和乐趣... 有问题的代码 下面的代码来自一个产品中看起来是好的抽象代码 - slightly(!) .这是调用一些统计数据的函数,然后进 ...
- Java Thread系列(十)Future 模式
Java Thread系列(十)Future 模式 Future 模式适合在处理很耗时的业务逻辑时进行使用,可以有效的减少系统的响应时间,提高系统的吞吐量. 一.Future 模式核心思想 如下的请求 ...
- python 多线程简介
Thread类定义了以下常用方法与属性: Thread.getName() \Thread.setName():老方式用于获取和设置线程的名称,官方建议用Thread.name替代 Thread.id ...