文档章节

【迪士尼彩乐园】完整源码分享下载

 彩38平台出租
发布于 2018/05/11 15:59
字数 561
阅读 402
收藏 0

【迪士尼彩乐园】完整源码分享下载:http://hxforum.com/thread-254-1-2.html

 

参考相关文章文献:

《迪士尼乐园二次开发源码下载》

《迪士尼改版新增吉林快三》

ProxyFactory

ProxyFactory Hierarchy:

 

AbstractProxyFactory

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

 

public <T> T getProxy(Invoker<T> invoker) throws RpcException {

Class<?>[] interfaces = null;

// createProxy时创建invoker时已将interface传入

String config = invoker.getUrl().getParameter("interfaces");

if (config != null && config.length() > 0) {

String[] types = Constants.COMMA_SPLIT_PATTERN.split(config);

if (types != null && types.length > 0) {

interfaces = new Class<?>[types.length + 2];

interfaces[0] = invoker.getInterface();

interfaces[1] = EchoService.class;

for (int i = 0; i < types.length; i ++) {

interfaces[i + 1] = ReflectUtils.forName(types[i]);

}

}

}

if (interfaces == null) {

interfaces = new Class<?>[] {invoker.getInterface(), EchoService.class};

}

// 调用子类的实现

return getProxy(invoker, interfaces);

JavassistProxyFactory

 

1

2

3

 

public <T> T getProxy(Invoker<T> invoker, Class<?>[] interfaces) {

return (T) Proxy.getProxy(interfaces).newInstance(new InvokerInvocationHandler(invoker));

}

getProxy的相关代码:

 

1

2

3

4

 

public static Proxy getProxy(Class<?>... ics)

{

return getProxy(ClassHelper.getCallerClassLoader(Proxy.class), ics);

}

动态类的实现:

 

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

 

public static Proxy getProxy(ClassLoader cl, Class<?>... ics)

{

//some ops...

try

{

ccp = ClassGenerator.newInstance(cl);

Set<String> worked = new HashSet<String>();

List<Method> methods = new ArrayList<Method>();

// 反射获取interface的相关信息并build code string,然后交给javassist动态生成实现类。

for(int i=0;i<ics.length;i++)

{

if( !Modifier.isPublic(ics[i].getModifiers()) )

{

String npkg = ics[i].getPackage().getName();

if( pkg == null )

{

pkg = npkg;

}

else

{

if( !pkg.equals(npkg) )

throw new IllegalArgumentException("non-public interfaces from different packages");

}

}

ccp.addInterface(ics[i]);

for( Method method : ics[i].getMethods() )

{

String desc = ReflectUtils.getDesc(method);

if( worked.contains(desc) )

continue;

worked.add(desc);

int ix = methods.size();

Class<?> rt = method.getReturnType();

Class<?>[] pts = method.getParameterTypes();

StringBuilder code = new StringBuilder("Object[] args = new Object[").append(pts.length).append("];");

for(int j=0;j<pts.length;j++)

code.append(" args[").append(j).append("] = ($w)$").append(j+1).append(";");

// 注意这里 handler.invoke(),代理的统一处理

code.append(" Object ret = handler.invoke(this, methods[" + ix + "], args);");

if( !Void.TYPE.equals(rt) )

code.append(" return ").append(asArgument(rt, "ret")).append(";");

methods.add(method);

ccp.addMethod(method.getName(), method.getModifiers(), rt, pts, method.getExceptionTypes(), code.toString());

}

}

if( pkg == null )

pkg = PACKAGE_NAME;

// 接口的实现类

String pcn = pkg + ".proxy" + id;

ccp.setClassName(pcn);

ccp.addField("public static java.lang.reflect.Method[] methods;");

ccp.addField("private " + InvocationHandler.class.getName() + " handler;");

ccp.addConstructor(Modifier.PUBLIC, new Class<?>[]{ InvocationHandler.class }, new Class<?>[0],"handler=$1;"); // $1等表示传入的参数,具体参考javassist官方文档

ccp.addDefaultConstructor();

Class<?> clazz = ccp.toClass();

clazz.getField("methods").set(null, methods.toArray(new Method[0]));

// 生成当前Proxy的子类,实现newInstance()方法

String fcn = Proxy.class.getName() + id;

ccm = ClassGenerator.newInstance(cl);

ccm.setClassName(fcn);

ccm.addDefaultConstructor();

ccm.setSuperClass(Proxy.class);

ccm.addMethod("public Object newInstance(" + InvocationHandler.class.getName() + " h){ return new " + pcn + "($1); }");

Class<?> pc = ccm.toClass();

proxy = (Proxy)pc.newInstance();

}

// some ops...

return proxy;

}

© 著作权归作者所有

共有 人打赏支持
粉丝 0
博文 1
码字总数 561
作品 0
厦门
私信 提问
【迪士尼彩乐园】全套源码分享下载带三个急速,后台带AB盘完美无错

【迪士尼彩乐园】全套源码分享下载带三个急速,后台带AB盘完美无错联系Q:2947702644 源码类别:时时系统/两面盘 界面语言:简体中文 源码授权:无加密文件及认证授权,永久性可直接使用。 版...

sjbv
2018/07/03
0
0
项目整理收集三

经过前两期的项目收集整体,我得到了许多同行朋友的支持和鼓励,使我更加觉得这种项目分享是有意义的,既然大家对我这么大的支持,那么小编怎么可以辜负大家对我的期望呢。废话少说,直接分享...

摸着石头过河_崖边树
2017/05/22
0
0
Android下读取PDF文件的解决方案

代码修改自该处(开源 Android pdf 阅读器开发总结)作者分享到Google code的代码,经仔细阅读后整理出读取PDF文档的主要部分(vudroid so库的使用),原作者应该也是在vudroid项目下稍微进行了修改...

nekocode
2013/06/30
0
26
最近在研究电台类app,分享2个源码大家一起讨论

好像去年有一阵,电台类的app特别火爆,喜马拉雅和蜻蜓FM互相还撕逼。听老罗,听好好说话,都得在电台app里,所以我想研究研究这些app。我没那么多资源,只好从app的开发架构方面去研究。 我...

达斯雷马
2016/10/20
666
1
Android游戏开发示例——弹幕+战棋

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴! 下载地址(内含源码及完...

项少龙1
2018/11/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS5.11配置Let's Encrypt免费证书

安装环境: [root@WQ02 opt]# lsb_release -aLSB Version::core-4.0-amd64:core-4.0-ia32:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-amd6......

m_lm
34分钟前
1
0
看看Canonical分享的2018年的十大Linux Snap

导读 Linux在2018年最令人耳目一新的一个方面是Snaps的普及。 Canonical透露,集装箱化的包装已经取得了巨大的成功。今天,Ubuntu制造商分享了2018年的十大Snap。 随着2018年即将结束,我发现...

问题终结者
46分钟前
3
0
天啦噜!在家和爱豆玩"剪刀石头布",阿里工程师如何办到?

阿里妹导读:如今,90、00后一代成为消费主力,补贴、打折、优惠等“价格战”已很难建立起忠诚度,如何与年轻人建立更深层次的情感共鸣?互动就是一种很好的方式,它能让用户更深度的参与品牌...

阿里云官方博客
今天
1
0
聊聊flink的Table API及SQL Programs

序 本文主要研究一下flink的Table API及SQL Programs 实例 // for batch programs use ExecutionEnvironment instead of StreamExecutionEnvironmentStreamExecutionEnvironment env = Stre......

go4it
今天
3
0
mysqldump应用

备份单个库/表数据或库/表结构 命令行下具体用法如下: mysqldump -u用戶名 -p密码 -d 数据库名 表名 > 备份文件名 1、导出数据库为dbname的表结构(其中用戶名為root,密码为dbpasswd,生成的...

阿dai
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部