软件架构设计理念分析之牛
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动态代理类位于flect包下,一般主要涉及到以下两个类: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 {
intln(“调用前你要插入的逻辑,如验证权限”);
//实际调用被代理类的方法
Object result = voke(rget,args);
intln(“调用后你要插入的逻辑,如调整系统状态”);
更有海量精彩玩法与你共享九大皇朝冒险!让我们共同期待吧!更多游戏尽在——真武平台更多页游戏资讯: return result;
}
Proxy:该类即为动态代理类,是Jdk实现的类,你无须实现,只使用就行其中主要包含以下内容:
wProxyInstance(ClassLoader,cls. Interfaces[],InvocationHandler)
其中ClassLoader是加载类,Inerface数组表示要代理的类的所有接口,InvocationHandler即上面介绍的具体实现类。通过这个方法就可以获取动态代理类Proxy,其实例是$proxy。如下例子表示如何使用动态代理:
PersonImpl person = new PersonImpl(); //在这里指定被代理类
InvocationHandler ds = new DynamicSubject(person); //初始化代理类
Class cls = tClass();
Person person1=ass.
cast(wProxyInstance(tClassLoader(),tInterfaces(),ds));
tName();
上面的person1就是proxy对象,即动态代理,所谓Dynamic Proxy是这样一种class:它是在运行时生成的class,在生成它时你必须提供一组interface给它,然后该class就宣称它实现了这些interface。你当然可以把该class的实例当作这些interface中的任何一个来用。当然啦,这个Dynamic Proxy其实就是一个Proxy,它不会替你作实质性的工作,在生成它的实例时你必须提供一个handler,由它接管实际的工作。
另外动态生成proxy类有以下限制:接口数组中的每个元素应代表接口,不能表示类,或原始类型,不能出现重复的类型,接口可以通过名称访问到,两个接口不能存在方法名与参数列表相同但返回值不同的情况,最大数为65535。动态代理只能够对interfaces进行动态的代理, 也就是说它先找出需要代理的对象实现的所有的interface, 然后只对所有的这些interface的所有的方法代理,对象除了interfaces以外的方法不予处理。这就是说我们再做contribution时,只要可以被外部调用的方法,都必须在接口中声明。
钦州医院白癜风哪家医院好上海治疗男科哪家医院好
米诺地尔酊多久有效果
- 下一页:游标使用覆盖
- 上一页:操作系统的配置命令详呢
- 06月21日都市大丹犬咬人吗位置
- 06月21日都市外出期间拉布拉多犬总是乱跑怎么办位置
- 06月21日都市外出旅游我们与松狮犬需要注意哪些事情位置
- 06月21日都市给狗狗吃肉干有哪些好处位置
- 06月21日都市多久给狗狗洗一次澡是最合理位置
- 06月21日都市夏季防中毒绝招避免比熊犬中毒要注意哪些事位置
- 06月21日都市夏季边境牧羊犬的剪毛热位置
- 06月20日都市猫得传染性腹膜炎怎么办健康的小猫儿位置
- 06月20日都市猫尾巴有什么用猫的尾巴怎么清洗你知道吗位置
- 06月20日都市猫咪饲养的几大禁忌位置
- 06月20日都市猫怕什么味道一般猫讨厌酸味位置
- 06月20日都市猫咪训练有技巧位置