博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java动态代理--一个简单的例子
阅读量:4601 次
发布时间:2019-06-09

本文共 1391 字,大约阅读时间需要 4 分钟。

这几天看视频看到了java的动态代理,这里写一个小例子。在写例子的时候发现:认为自己会了,和能写出来真不是一个概念。还是要多写代码,然后写博客再深入一些,费曼学习法--教,是最好的学。

1.什么是动态代理

代理模式 
代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 
按照代理的创建时期,代理类可以分为两种。 
静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。 
动态代理:在程序运行时,运用反射机制动态创建而成。

2.动态代理的Demo

首先创建一个接口,PersonDao

public interface PersonDao {	public void say();}
然后写一个实现类PersonDaoImpl

public class PersonDaoImpl implements PersonDao{	@Override	public void say() {		System.out.println("time to eat");	}}
然后写个使用类PersonHandler

public class PersonHandler implements InvocationHandler {	private Object obj;		public PersonHandler(Object obj){		this.obj=obj;	}			@Override	public Object invoke(Object proxy, Method method, Object[] args)			throws Throwable {				System.out.println("before");		Object result = method.invoke(obj, args);		System.out.println("after");		return result;	}}

PersonHandler必须要实现InvocationHandler接口

然后 再写个测试类

public class PersonTest {		@Test	public void test(){		PersonDao pDao = new PersonDaoImpl();		PersonHandler handler = new PersonHandler(pDao);				PersonDao proxy = (PersonDao)Proxy.newProxyInstance(pDao.getClass().getClassLoader(), pDao.getClass().getInterfaces(), handler);		proxy.say();	}}
最后控制台输出

至于具体细节,可能要研究一下源码了,有时间再说吧

转载于:https://www.cnblogs.com/Iqiaoxun/p/5350586.html

你可能感兴趣的文章
linux文件系统
查看>>
mysql以zip安装,解决the service already exists
查看>>
Maven-POM
查看>>
Java访问修饰符(访问控制符)
查看>>
替换空格_把字符串里面的空格替换成%20
查看>>
AFNetworking content type not support
查看>>
【MSDN】 SqlServer DBCC解析
查看>>
Caused by: java.lang.ClassNotFoundException: org.aopalliance.intercept.MethodInterceptor
查看>>
VM VirtualBox安装Centos6.5
查看>>
C复习篇 - 使用Posix标准线程库 Porgramming with Pthread
查看>>
socket 通讯 端口绑定 问题 解答
查看>>
关于用户需求的调查
查看>>
云计算时代对传统软件工程的冲击
查看>>
Mahout--(三)相似性度量
查看>>
CodeForces 980 C Posterized
查看>>
C#泛型列表List<T>基本用法总结
查看>>
Drug side effect extraction from clinical narratives of psychiatry and psychology patients
查看>>
linux定时备份mysql并同步到其它服务器
查看>>
浅谈分布式事务
查看>>
Spring MVC专题
查看>>