首页产品库评测行情新闻|手机数码笔记本台式机DIY硬件数字家庭数码相机办公外设|软件下载游戏开发|社区

更多

数码相机
MP4
LCD
机箱
音箱

软件资讯设计 工具 系统 开发 安全 办公 陶吧 IT教育 Vista频道 | 下载中心酷我音乐盒 腾讯QQ
天极网 > 开发频道>Tucany SCA软件架构设计理念分析之二

Tucany SCA软件架构设计理念分析之二

2007-12-04 10:32作者:lijj出处:论坛整理责任编辑:方舟

  1. 概述

  上一篇文章主要讲述了Tuscany SCA的插件板模式及工厂模式的发展和提升,本文主要介绍Tuscany SCA开源软件中动态代理模式(Dynamic Proxy)及方法调用Invocation 。在使用Tuscany SCA中,我们只需要写接口及实现类,这些接口和实现类就是普通的java代码,并没有特殊之处。Tuscany SCA会根据“.composite”文件把这些信息组装成Compoiste,至于如何组装,则是Tuscany SCA的Assembly模块的主要内容,我以后会介绍,但现在的问题是,如何来实现调用这些类的方法的问题,因为当调用的时候,外部接口是Tuscany SCA的Domain,Domain依赖的Runtime中就加载有Composite的内容,客户的逻辑在应用程序(即interface, implementClass),但这些都被组装进入了Composite中,所以要使用动态代理模式来实现,使得侵入性最小。

  2. Java动态代理基础知识

  Java动态代理类位于Java.lang.reflect包下,一般主要涉及到以下两个类:InvocationHandler和Proxy。

  InvocationHandler必须被实现,实现这个接口的invoke(Object obj,Method method, Object[] args),第一个参数obj一般是指代理类,method是被代理的方法, args为该方法的参数数组。这个invoke方法的内容主要是在调用被代理的方法前后方便地加上你自己的逻辑,如下例子

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
 System.out.println(“调用前你要插入的逻辑,如验证权限”);

 //实际调用被代理类的方法

 Object result = method.invoke(this.target,args);
 System.out.println(“调用后你要插入的逻辑,如调整系统状态”);

 return result;
}

  Proxy:该类即为动态代理类,是Jdk实现的类,你无须实现,只使用就行其中主要包含以下内容:

Proxy.newProxyInstance(ClassLoader,cls. Interfaces[],InvocationHandler)

  其中ClassLoader是加载类,Inerface数组表示要代理的类的所有接口,InvocationHandler即上面介绍的具体实现类。通过这个方法就可以获取动态代理类Proxy,其实例是$proxy。如下例子表示如何使用动态代理:

PersonImpl person = new PersonImpl(); //在这里指定被代理类
InvocationHandler ds = new DynamicSubject(person); //初始化代理类
Class cls = person.getClass();
Person person1=Person.class.
cast(Proxy.newProxyInstance(cls.getClassLoader(),cls.getInterfaces(),ds));
person1.getName();

  上面的person1就是proxy对象,即动态代理,所谓Dynamic Proxy是这样一种class:它是在运行时生成的class,在生成它时你必须提供一组interface给它,然后该class就宣称它实现了这些interface。你当然可以把该class的实例当作这些interface中的任何一个来用。当然啦,这个Dynamic Proxy其实就是一个Proxy,它不会替你作实质性的工作,在生成它的实例时你必须提供一个handler,由它接管实际的工作。

  另外动态生成proxy类有以下限制:接口数组中的每个元素应代表接口,不能表示类,或原始类型,不能出现重复的类型,接口可以通过名称访问到,两个接口不能存在方法名与参数列表相同但返回值不同的情况,最大数为65535。动态代理只能够对interfaces进行动态的代理, 也就是说它先找出需要代理的对象实现的所有的interface, 然后只对所有的这些interface的所有的方法代理,对象除了interfaces以外的方法不予处理。这就是说我们再做contribution时,只要可以被外部调用的方法,都必须在接口中声明。

共3页。 123下一页
进入 最权威的Windows 7论坛 查看网友讨论

软件频道最新更新

热点推荐

IT嘉年华

编辑推荐

软件下载

热门
推荐

网友关注

软件
资料
游戏

装机推荐

文章排行

本周
本月
最新更新
天极服务|关于我们|About us|网站律师|RSS订阅|友情合作|加入我们|天极动态|网站地图|意见反馈|MSN/QQ上看天极
Copyright (C) 1999-2012 Yesky.com, All Rights Reserved 版权所有 天极网络