博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java学习笔记14--动态代理
阅读量:7057 次
发布时间:2019-06-28

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

 

InvocationHandler接口

[java]
  1. public interface InvocationHandler{  
  2.     public Object invoke(Object proxy,Method method,Object[] args)throws Throwable  
  3. }  

参数说明:

Object  proxy:被代理的对象

Method  method:要调用的方法

Object   args[]:方法调用时所需要的参数

 

Proxy类

Proxy类是专门完成代理的操作类,可以通过此类为一个或多个接口动态地生成实现类,此类提供了如下的操作方法:

[java]
  1. public static Object newProxyInstance(ClassLoader loader,  
  2.             Class<?>[] interfaces,  
  3.             InvocationHandler h)  
  4.             throws IllegalArgumentException  

参数说明:

ClassLoader  loader:类加载器

Class<?>[]  interfaces:得到全部的接口

InvocationHandler  h:得到InvocationHandler接口的子类实例

 

动态代理:

[java]
  1. package com.itmyhome;  
  2.   
  3. import java.lang.reflect.InvocationHandler;  
  4. import java.lang.reflect.Method;  
  5. import java.lang.reflect.Proxy;  
  6.   
  7. interface IHello{    //定义接口  
  8.     public void sayHello();  
  9. }  
  10. class HelloImpl implements IHello{  
  11.   
  12.     @Override  
  13.     public void sayHello() {  
  14.         // TODO Auto-generated method stub  
  15.         System.out.println("hello itmyhome");  
  16.     }  
  17. }  
  18. class MyInvocationHandler implements InvocationHandler{  
  19.   
  20.     private Object obj;   //真实主题类  
  21.     public Object bind(Object obj){  
  22.         this.obj = obj;  
  23.         return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);  
  24.     }  
  25.     @Override  
  26.     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {  
  27.         System.out.println("***before***");  
  28.         Object temp = method.invoke(obj, args);  
  29.         System.out.println("***after***");  
  30.         return temp;  
  31.     }  
  32. }  
  33.   
  34. public class T {  
  35.     public static void main(String[] args) throws Exception{  
  36.         IHello h = (IHello)new MyInvocationHandler().bind(new HelloImpl());  
  37.         h.sayHello();  
  38.     }  
  39. }  

 

转载地址:http://marol.baihongyu.com/

你可能感兴趣的文章
MFC树控件CTreeCtrl
查看>>
007——数组(七)通过回调函数得到数组交集或差集
查看>>
php中的curl的一些参数总结
查看>>
Objective-c——多线程开发第一天(pthread/NSThread)
查看>>
Linux下网站压力测试最简单好用的软件,零基础也可以搭建和使用!
查看>>
Search in Rotated Sorted Array
查看>>
box-sizing 盒模型
查看>>
独立开发 一个社交 APP 的架构分享 (已实现)
查看>>
高阶自定义View --- 粒子变幻、隧道散列、组合文字
查看>>
完全平方数(钟神的hao)
查看>>
AC日记——绿色通道 codevs 3342
查看>>
AC日记——Broken BST codeforces 797d
查看>>
ansible续集
查看>>
Azure Storage Client Library 重试策略建议
查看>>
元素分类
查看>>
页面获取当前时间
查看>>
select,poll,epoll
查看>>
关于“foreach循环”中遇到的几个问题总结
查看>>
重温JSP学习笔记--El函数库
查看>>
模板引擎ejs的include方法
查看>>