`
Jonny-java
  • 浏览: 11644 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

设计模式之JDK动态代理

阅读更多
一、什么是动态代理
动态代理指做一件事,不用全部都亲力亲为,划分一部分给更专业的人去办理。
二、动态代理的特点
1、有两个角色:被代理人和代理人
2、有一件事必须做,但又不完全由自己做。
3、代理人拥有被代理人的资料。
三、怎么实现
1、创建一个接口
package com.fsl.proxy;

public interface People {
	
	//买火车票
	public void buyTrainTicket();
	
	public String getId();
	
	public String getName();
	
}



2、创建被代理人
package com.fsl.proxy;

//被代理人,张三
public class ZhangSan implements People {
	private String id;
	
	private String name;
	
	public ZhangSan() {
		
	}

	public ZhangSan(String id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	//张三要买火车票回家过年
	@Override
	public void buyTrainTicket() {
		System.out.println("我要买到赣州的火车票!");
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}




3、创建代理人
package com.fsl.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

//代理人,黄牛
public class HuangNiu implements InvocationHandler {
	People target;
	
	public Object getInstance(People target) {
		this.target = target;
		Class clazz = this.target.getClass();
		return Proxy.newProxyInstance(clazz.getClassLoader(), clazz.getInterfaces(), this);
	}

	/**
	 * 原理:
	 * 1、拿到被代理对象的引用,然后获取到它的接口
	 * 2、JDK代理重新生成一个类,同时实现代理对象的所实现的接口
	 * 3、重新动态生成一个class字节码
	 * 4、然后编译,生成一个代理类
	 */
	
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		System.out.println("你好," + this.target.getName() + " 先生/女士");
		System.out.println("我是黄牛,请问您是要买到哪里的票?");
		System.out.println("==================================");
		method.invoke(this.target, args);
		System.out.println("==================================");
		System.out.println("您的票买到了,请拿好!");
		return null;
	}

}





测试类
package com.fsl.proxy;

import java.lang.reflect.Proxy;

public class ProxyTest {

	public static void main(String[] args) {

		People people = (People)new HuangNiu().getInstance(new ZhangSan("123456", "张三"));
		people.buyTrainTicket();
	}

}



分享到:
评论

相关推荐

    java设计模式【之】JDK动态代理【源码】【场景:帮爸爸买菜】.rar

    java设计模式【之】JDK动态代理【源码】【场景:帮爸爸买菜】.rar /** * 代理模式 * 在开发者的角度来看,创建一个代理对象,提供给用户使用,避免用户直接访问真正的对象 * 在用户角度来看,就是普通的类方法...

    java常用设计模式及JDK与CGLIB实现动态代理区别(源码)

    java常用设计模式及JDK与CGLIB实现动态代理区别(源码) /** * 使用cglib动态代理 * @author * */ public class BookFacadeProxy implements MethodInterceptor{ private Object target; @Override public...

    Java设计模式——代理设计模式(静态代理和动态代理)

    Java设计模式——代理设计模式(静态代理和动态代理) 各种情况例子源码

    两万字吐血总结,代理模式及手写实现动态代理(aop原理,基于jdk动态代理)

    代理模式及手实现动态代理(aop原理)一、代理模式1. 定义2. 示例(1)静态代理(2)动态代理3...代理模式(Proxy Pattern) 是一个使用频率非常高的设计模式,其定义如下: Provide a surrogate or placeholder for an

    简谈jdk动态代理

    听了马老师的课,对动态代理设计模式,有了一点自己的认识,希望和大家分享。后面cglib还没有总结。

    cgLib与JDK动态代理的用法

    代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类...

    jdk动态代理&log4j;&SSH;&SSM;(视频+源码+讲义)

    动力节点reyco郭 SSH视频和SSH前言视频+讲义+部分源码 SSM视频和SSM前言视频+讲义+所有源码 jdk动态代理视频,log4j视频 适配器设计模式视频和源码

    jdk与cglib动态代理与底层实现

    代理模式详解-jdk与cglib动态代理与底层实现,spring中常用的设计模式,本案例是从源码到代理模式的实现。

    Java设计模式之:静态代理和JDK动态代理(案例实战)

    代理模式:是一种设计模式,提供了对目标对象的间接访问方式,即通过代理访问目标对象。如此便于在目标实现的基础上增加额外的功能操作,前拦截,后拦截等,以满足自身的业务需求,同时代理模式便于扩展目标对象功能...

    Java设计模式及应用场景之《代理模式》

    文章目录一、代理模式定义二、代理模式的结构和说明三、代理模式的分类四、代理模式示例五、动态代理1、JDK动态代理JDK动态代理使用步骤JDK动态代理示例JDK动态代理实现原理JDK动态代理局限性2、CGLIB动态代理CGLIB...

    Java 动态代理.md

    代理模式(Proxy Pattern)是 23 种设计模式的一种,属于结构型模式。他指的是一个对象本身不做实际的操作,而是通过其他对象来得到自己想要的结果。这样做的好处是可以在目标对象实现的基础上,增强额外的功能操作,...

    静态代理和动态代理Demo

    资源列举了设计模式中的静态代理和动态代理的简单java实现,jdk1.8版本经过测试验证,对于想学习设计模式的童靴应该有所帮助

    面向对象初学者必须掌握的几种设计模式

    观察者模式 Observer:Swing中的事件模型 工厂模式 Factory:在JDK中遍地都是,比如JDBC、JNDI等,是学习Spring的基础 命令模式 Command:Struts框架的基石 单例模式 Singleton:最简单的设计模式,大量...

    使用动态代理演示Spring的AOP编程原理

    其实,Spring没有什么东西,不就是反射技术加设计模式的编程嘛。为了说明Spring的AOP原理,本人使用代理模式中的动态代理完成演示AOP编程的原理的演示。相信,如果你耐心看完整个程序(几乎一行注释一行代码),那么你...

    设计模式之代理模式proxy.zip

    代码仅供参考学习 。

    Java动态代理

    本课程主要讲述Java反射机制与设计模式之一:代理模式的原理与应用 同时详细讲述了Java对代理模式的支持以及Java中动态代理的原理,应用与实践 本课程要求大家对Java泛型知识有所了解,因为程序代码中大量使用了泛型...

    Java理论与实践:用动态代理进行修饰

    简介:动态代理工具 是 java.lang.reflect 包的一部分,在 JDK 1.3 版本中添加到 JDK,它...  动态代理为实现许多常见设计模式(包括 Facade、Bridge、Interceptor、Decorator、Proxy(包括远程和虚拟代理)和 Adap

    java设计模式选择题复习题.doc

    行为型特点:怎样合理的设计对象之间的交互通信,以及怎样合理的为对象分配职 结构型特点:主要用于处理类或对象的组合 Java jdk中使用了哪些设计模式 1.单例2.静态工厂3.工厂方法4.抽象工厂5.构造者6.原型7.适配器...

    Spring AOP源码深度解析:掌握Java高级编程核心技术

    动态代理是实现AOP的基础,它通过JDK动态代理或CGLIB代理生成被代理对象的子类。通知是织入到目标对象连接点上的一段程序,例如@Before、@After等。 切点定义了通知应该在哪些连接点上触发。而切面则是通知和切点的...

    JAVA高并发高性能高可用高扩展架构视频教程

    Java-Base64算法_创新_防止表单重复提交 JAVA企业级基础课题(HashMap那些事) 企业架构师必备技能(JAVA核心技术反射) JavaWeb之基础(手写实现Tomcat服务器)...揭开springAOP神秘面纱之动态代理 网络爬虫之JAVA正则表达式

Global site tag (gtag.js) - Google Analytics