Java程序开发中代理技术的使用方法

程序

  如果你这样的需求:在运行时创建实现一组给定接口的类,注意这个类是在运行时创建的,你就需要使用JAVA中的代理类来达成你的要求。

  代理类提供在运行时创建类的能力,这个新建的类能实现你指定的接口。 当然你不能在运行时为要实现的接口中的方法定义新代码,而是提供一个调用处理器来实现。调用处理器是实现了InvocationHandler接口的类的对象,此接口只有一个方法:

Object invoke(Object proxy,Method mtd,Object[] args)

  其中proxy是代理对象;mtd是描述方法的类的对象,此对象执行它的invoke(Object obj,Object[] args)方法可以调用封装在Mthod对象中的方法;args是存储了此方法参数的数组。

  建立代理对象:使用Proxy类的newProxyInstance方法,其格式如下:

Object proxy=Proxy.newProxyInstance(null,interfaces,handler);

  其中第一个参数是一个类加载器,这里使用默认加载器,用null表示;第二个参数是一个Class的数组,其每个元素是一个接口,这就是用来指定要实现的一组接口,哪怕只有一个接口也要通过数组来传递;第三个参数就是调用处理器。

  在代理对象上调用方法时,调用处理器的invoke方法会被自动调用,正在调用的方法和参数自动传递给inboke方法的jmtdt args形式参数中,同时也会用args参数数组中的参数去调用mtd对象中指定的方法。

  代理的应用:方法调用跟踪(把要跟踪的对象包装成代理类对象);为远程调用方法提供路由;用户接口事件与动作关联(C#中有类似的功能)。

时间: 2024-10-06 05:38:02

Java程序开发中代理技术的使用方法的相关文章

Java程序中代理技术的使用方法简介

如果你这样的需求:在运行时创建实现一组给定接口的类,注意这个类是在运行时创建的,你就需要使用JAVA中的代理类来达成你的要求. 代理类提供在运行时创建类的能力,这个新建的类能实现你指定的接口. 当然你不能在运行时为要实现的接口中的方法定义新代码,而是提供一个调用处理器来实现.调用处理器是实现了InvocationHandler接口的类的对象,此接口只有一个方法: Object invoke(Object proxy,Method mtd,Object[] args) 其中proxy是代理对象:m

使用技巧:Java程序开发中如何应用线程

程序|技巧 Java平台从开始就被设计成为多线程环境.在你的主程序执行的时候,其它作业如碎片收集和事件处理则是在后台进行的. 本质上,你可以认为这些作业是线程.它们正好是系统管理线程,但是无论如何,它们是线程.线程使你能够定义相互独立的作业,彼此之间互不干扰.系统将交换这些作业进或出cpu,这样(从外部看来)它们好象是同时运行的. 在你需要在你的程序中处理多个作业时,你也可以使用多个进程.这些进程可以是你自己创建的,你也可以操纵系统线程.你进行这些多作业处理,要使用几个不同的类或接口: java

java程序 不能运行-JAVA小程序开发中遇到一个问题

问题描述 JAVA小程序开发中遇到一个问题 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at Studentguanli.actionPerformed(Studentguanli.java:111) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$

Java游戏开发中应始终坚持的10项基本原则

关于文章中涉及的两个杜撰概念: 一.绘图器:众所周知,Java GUI以paint进行绘图,以repaint进行图像刷新,而完成repaint及paint这一连贯过程中所用到绘图组件,我将其称为绘图器.就我个人的体会,绘图器的调用时机应始终处于repaint之后paint之前,即通过repaint触发刷新后执行,当其中的具体逻辑完成其对应的图像绘制后,再通过统一接口将其图像插入paint中,为了匹配需要,绘图器应始终以接口方式实现. 二.监听器:这里所说的监听器,并不是特指某个Listener组

Android程序开发中单选按钮(RadioGroup)的使用详解

在还没给大家介绍单选按钮(RadioGroup)的使用,先给大家展示下效果图吧: xml文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_heig

android 应用程序开发中,清除缓存的功能怎么做啊?

问题描述 android 应用程序开发中,清除缓存的功能怎么做啊? android 应用程序开发中,清除缓存的功能怎么做啊?清除此应用程序的缓存,怎么做? 解决方案 getCacheDir()能够得到当前项目的缓存地址 在项目中经常会使用到WebView 控件,当加载html 页面时,会在/data/data/应用package 目录下生成database与cache 两个文件夹.请求的url 记录是保存在WebViewCache.db,而url 的内容是保存在WebViewCache 文件夹下

Ajax程序开发中常见问题

Ajax程序开发中常见问题,看下文章或许你就少犯了许多错误了. 1.ajax,action中response返回的xml文档格式错误时,eclipse debug进入不到action中.     2.ajax缓存问题,需要加入xmlHttp.setRequestHeader("If-Modified-Since","0");便可解决.     3.如果不是ajax提交,而设置了PrintWriter out = response.getWriter();则jsp会产

界面-web程序开发中文件的下载

问题描述 web程序开发中文件的下载 在登录得主界面增加下载的链接,可以下载发布到服务器上的文件.使用的框架是spring,Struts2,ibatis. 解决方案 如果你不愿暴露文件存储路径,就用io流的方式,若果无所谓,直接把路径放在超链接上即可. 解决方案二: BufferedInputStream br = new BufferedInputStream(new FileInputStream(f)); byte[] buf = new byte[1024]; int len = 0;

Java web开发中要是用jdbc连接access数据库,连接url怎么写相对位置

问题描述 Java web开发中要是用jdbc连接access数据库,连接url怎么写相对位置 Java web开发中要是用jdbc连接access数据库,连接url怎么写相对位置,注意这里是jdbc方法连接 而不是jdbc-odbc 例如access数据库就在项目中(project文件夹下) 代码为: try { // 加载jdbc - odbc驱动 Class.forName("com.hxtt.sql.access.AccessDriver"); // 根据url创建连接实例 a