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-12-09 09:54:45

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

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

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

在Java程序中使用数据库的新方法_java

 Java 8终于到来了! 经过几年的等待, java程序员终于能在java中得到函数式编程的支持了. 函数式编程的支持能流程化现有的代码并且为java提供强大的能力.在这些新特性中最瞩目的是java程序员对数据库的操作方式.函数式编程带来了令人激动的简便高效的数据库API. Java 8 将会支持可与像C#的LINQ等语言竞争的新的数据库访问方式.处理数据的函数式方式 Java 8 不仅仅添加了函数式支持,它也通过新的函数式处理数据的方式扩展了集合(Collection)类. 而通常情况下ja

Java 程序中的多线程

程序|多线程 在Java程序中使用多线程要比在 C 或 C++ 中容易得多,这是因为 Java 编程语言提供了语言级的支持.本文通过简单的编程示例来说明 Java 程序中的多线程是多么直观.读完本文以后,用户应该能够编写简单的多线程程序. 为什么会排队等待? 下面的这个简单的 Java 程序完成四项不相关的任务.这样的程序有单个控制线程,控制在这四个任务之间线性地移动.此外,因为所需的资源 - 打印机.磁盘.数据库和显示屏 -- 由于硬件和软件的限制都有内在的潜伏时间,所以每项任务都包含

在Java程序中运行外部类文件

程序 在Java程序中运行外部类文件 一.引言无论是用传统的编程语言(C++.VB等)还是Java语言编程,都经常需要在一个运行的程序中执行另外一个独立的外部程序.例如用Java设计一个IDE程序,那么这个IDE程序就必需能够调式.运行其它独立的外部Java程序.况且直接运行已经存在的外部程序来实现本程序的某些特定的功能,也是提高程序开发效率的一种重要手段.Java2为实现在一个Java程序中运行外部类文件(即Java程序)提供了的两种解决方案,即在同一进程中运行外部类文件和在不同进程中运行外部

自动检测并行Java程序中的错误

当 CPU 进入多核时代之后,并行编程将更加流行,但是编写并行程序更容易 出错.在开发过程中,工程师能注意到同一个程序在单线程运行时是正确的,但 是在多线程时,它会有可能出错.和并行相关的错误的产生原因通常都非常隐晦 ,而且在一次测试中,它们的出现与否具有很强的随机性.由于程序中多个线程 之间可能以任意的方式交错执行,即使一个并行程序正确的运行了成百上千次, 下一次运行仍然可能出现新的错误. Multi-Thread Run-time Analysis Tool 是由 IBM 为多线程 Java

在Java程序中内嵌Mozilla浏览器

简介 SWT 浏览器部件是 SWT 所提供的众多部件中较为复杂的一个,它提供了在 Java 应用程序中内嵌浏览器应用并通过 Java API 与之进行交互的能力.一个 典型的应用场景是,开发者可以在客户段程序中嵌入一个内置浏览器,访问特定 HTML 应用,从而集 web 技术与客户端技术两者之所长,开发出具有更丰富功能 和界面的软件. 本文主要包含两个方面的内容:1. 如何在 Java 应用程序中内嵌基于 Mozilla 的浏览器部件.2. 使用 JavaXPCOM bridge 定制浏览器功能

java程序中如何加入声音?

问题描述 java程序中如何加入声音? 新手请具体点,想做一个汤姆猫那样,点击会有声音,如何加入声音?需要什么.jar包? 解决方案 java的声音处理方法: http://lz881228.blog.163.com/blog/static/1141973242010116112336643/ 解决方案二: JMF 搜一下看看 应该有不少教程 解决方案三: Applet 下 自己找下 应该很容易的 解决方案四: 这个,我以前没用过,肯定能加上...

基础-java 程序中如何获取所有类 或者带注解的类

问题描述 java 程序中如何获取所有类 或者带注解的类 最近写了一个使用注解的mvc的spring框架,这个框架的基础就是要读取到工程中的带有注解的类. 我的实现方法是将工程中的目录全部读取匹配得到.class后缀的所有路径的list,再用class.forname加载对应的类并且将注解读取判断是否为定义的注解.然后使用一个map装起来,在用到的时候拿出来.但是问题来了,我将项目打包jar之后程序是不能够读取到文件的.也就是说获取不到类的全路径如:cn.com.smq.Test 这样的字符串.

介绍在Java程序中记录日志的最佳实践

本文介绍了在Java程序中记录日志的最佳实践,同时也介绍了如何使用开源软件对日志进行聚合和分析.对于现在的应用程序来说,日志的重要性是不言而喻的.很难想象没有任何日志记录功能的应用程序运行在生产环境中.日志所能提供的功能是多种多样的,包括记录程序运行时产生的错误信息.状态信息.调试信息和执行http://www.aliyun.com/zixun/aggregation/18195.html">时间信息等.在生产环境中,日志是 查找问题来源的重要依据.应用程序运行时的产生的各种信息,都应该通