对于动态代理Proxy类的总结

之前转载了一个关于java动态代理的文章,研究了一下,下面的内容是我根据自己理解总结的,如果由错误的地方欢迎各位大神们指教,必定感激不尽!

Proxy类的总结:(例子是我转载的博客:这是链接)

简单的说要想实现动态代理来改造要代理对象的方法,就要做以下几步:

1.写一个类实现InvocationHandler接口

例子中的HelloWorldHandler类就是

2.找到要被代理的对象,没有的话就创建

就像例子中的HelloWorld helloWorld = new HelloWorld(); helloWorld就是将要被代理的对象

3.创建InvocationHandler接口的实例(即第一步中实现了InvocationHandler接口的类)将要被代理的对象作为参数传入

InvocationHandler handler = new HelloWorldHandler(helloWorld);

4.在实现了InvocationHandler接口的类中,加出未实现的方法invoke(Object proxy, Method method, Object[] args);

参数:proxy要代理的对象,method要代理的对象中的方法,args要代理对象方法里的参数

如果不需要改变原始对象中的方法,要在调用代理对象的方法之前和之后做操作,如例子中的doBrfore();和doAfter();

如果要改造对象中的某个方法(如abc();方法)则用“abc”.equals(method.getName()判断当前执行的方法,再去改造里面的逻辑

5.创建动态代理类对象 newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)

loader - 定义代理类的类加载器,interfaces - 代理类要实现的接口列表,h - 指派方法调用的调用处理程序 

例子中的:HelloWorld proxy=(HelloWorld)Proxy.newProxyInstance(
                helloWorld.getClass().getClassLoader(), 
                helloWorld.getClass().getInterfaces(), 
                handler);

proxy就是代理之后的对象

其实还可以简单的写成这样:

用匿名内部类代替实现接口

HelloWorld proxy = (HelloWorld) Proxy.newProxyInstance(helloWorld.getClass().getClassLoader(),
			helloWorld.getClass().getInterfaces(), new InvocationHandler() {
				public Object invoke(Object proxy, Method method, Object[] args)
						throws Throwable {
					// 参数:proxy要代理的对象,method要代理的对象中的方法,args要代理对象方法里的参数
					// 如果不需要改变原始对象中的方法,要在调用代理对象的方法之前和之后做操作,如例子中的doBrfore();和doAfter();
					// 如果要改造对象中的某个方法(如abc();方法)则用“abc”.equals(method.getName()判断当前执行的方法,再去改造里面的逻<span style="white-space:pre">					</span>// 辑

				}
			});


proxy就是代理后的对象


总结是我看懂一点的时候根据自己理解总结的,如果由错误的地方欢迎各位大神们指教,必定感激不尽
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值