原文链接

导航目录

  • 工具类ZCL_ABAP_DYNAMIC_PROXY_FACTORY
  • 工具类zcl_abap_cglib_tool
  • Jerry Wang的ABAP专题文章

工具类ZCL_ABAP_DYNAMIC_PROXY_FACTORY

该工具类负责生产一个新的具有持久化存储的静态代理类:

class ZCL_ABAP_DYNAMIC_PROXY_FACTORY definitionpublicfinalcreate public .public section.class-methods GET_PROXYimporting!IO_ORIGIN type ref to OBJECT!IV_NEW_CLASS_NAME type STRING!IV_PRE_EXIT type STRING!IV_POST_EXIT type STRINGreturningvalue(RO_PROXY) type ref to OBJECT .
protected section.
private section.class-data MS_VSEOCLASS type VSEOCLASS .class-data MT_ATTRIBUTE type SEOO_ATTRIBUTES_R .class-data MT_IMP_IF type SEOR_IMPLEMENTINGS_R .class-data MT_METHODS type SEOO_METHODS_R .class-data MT_PARAMETERS type SEOS_PARAMETERS_R .class-data MV_INTERFACE_NAME type STRING .class-data MV_METHOD_NAME type STRING .class-data MT_SOURCECODE type SEO_METHOD_SOURCE_TABLE .class-data MV_NEW_CLASS_NAME type STRING .class-data MO_ORIGIN type ref to OBJECT .class-data MV_PRE_EXIT type STRING .class-data MV_POST_EXIT type STRING .class-methods GENERATE_CLASS .class-methods PREPARE_ATTR_AND_SIGNATURE .class-methods PREPARE_SOURCE_CODE .class-methods EXTRACT_INTERFACE_INFOimporting!IO_ORIGIN type ref to OBJECT .class-methods INITimporting!IV_NEW_CLASS_NAME type STRING!IO_ORIGIN type ref to OBJECT!IV_PRE_EXIT type STRING!IV_POST_EXIT type STRING .class-methods CREATE_INSTANCEreturningvalue(RO_PROXY) type ref to OBJECT .
ENDCLASS.CLASS ZCL_ABAP_DYNAMIC_PROXY_FACTORY IMPLEMENTATION.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Private Method ZCL_ABAP_DYNAMIC_PROXY_FACTORY=>CREATE_INSTANCE
* +-------------------------------------------------------------------------------------------------+
* | [<-()] RO_PROXY                       TYPE REF TO OBJECT
* +--------------------------------------------------------------------------------------</SIGNATURE>method CREATE_INSTANCE.TRY.create object ro_proxy type (mv_new_class_name)EXPORTINGio_origin = mo_origin.CATCH cx_root INTO data(cx_root).WRITE:/ 'instance created failed: ', cx_root->get_text( ).ENDTRY.endmethod.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Private Method ZCL_ABAP_DYNAMIC_PROXY_FACTORY=>EXTRACT_INTERFACE_INFO
* +-------------------------------------------------------------------------------------------------+
* | [--->] IO_ORIGIN                      TYPE REF TO OBJECT
* +--------------------------------------------------------------------------------------</SIGNATURE>method EXTRACT_INTERFACE_INFO.data(lo_class) = cast CL_ABAP_OBJECTDESCR( cl_abap_objectdescr=>describe_by_object_ref( io_origin ) ).READ TABLE lo_class->interfaces INTO mv_interface_name INDEX 1 .CHECK sy-subrc = 0."For demo purpose, I assume only one method in one interfaceSELECT SINGLE cmpname INTO mv_method_name FROM seocompoWHERE clsname = mv_interface_name.endmethod.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Private Method ZCL_ABAP_DYNAMIC_PROXY_FACTORY=>GENERATE_CLASS
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD generate_class.CALL FUNCTION 'SEO_CLASS_CREATE_COMPLETE'EXPORTINGdevclass                   = '$TMP'version                    = seoc_version_activeauthority_check            = abap_trueoverwrite                  = abap_truesuppress_method_generation = abap_falsegenflag                    = abap_falsemethod_sources             = mt_sourcecodesuppress_dialog            = abap_trueCHANGINGclass                      = ms_vseoclassmethods                    = mt_methodsparameters                 = mt_parametersimplementings              = mt_imp_ifattributes                 = mt_attributeEXCEPTIONSexisting                   = 1is_interface               = 2db_error                   = 3component_error            = 4no_access                  = 5other                      = 6OTHERS                     = 7.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_ABAP_DYNAMIC_PROXY_FACTORY=>GET_PROXY
* +-------------------------------------------------------------------------------------------------+
* | [--->] IO_ORIGIN                      TYPE REF TO OBJECT
* | [--->] IV_NEW_CLASS_NAME              TYPE        STRING
* | [--->] IV_PRE_EXIT                    TYPE        STRING
* | [--->] IV_POST_EXIT                   TYPE        STRING
* | [<-()] RO_PROXY                       TYPE REF TO OBJECT
* +--------------------------------------------------------------------------------------</SIGNATURE>method GET_PROXY.init( iv_new_class_name = iv_new_class_name io_origin = io_originiv_pre_exit = iv_pre_exit iv_post_exit = iv_post_exit ).extract_interface_info( io_origin ).prepare_source_code( ).prepare_attr_and_signature( ).generate_class( ).ro_proxy = create_instance( ).endmethod.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Private Method ZCL_ABAP_DYNAMIC_PROXY_FACTORY=>INIT
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_NEW_CLASS_NAME              TYPE        STRING
* | [--->] IO_ORIGIN                      TYPE REF TO OBJECT
* | [--->] IV_PRE_EXIT                    TYPE        STRING
* | [--->] IV_POST_EXIT                   TYPE        STRING
* +--------------------------------------------------------------------------------------</SIGNATURE>method INIT.clear: mv_interface_name, mv_method_name, mt_sourcecode,mt_sourcecode,mt_imp_if,  ms_vseoclass, mt_attribute,mt_parameters,mt_methods.mv_new_class_name = iv_new_class_name.mo_origin = io_origin.mv_pre_exit = iv_pre_exit.mv_post_exit = iv_post_exit.endmethod.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Private Method ZCL_ABAP_DYNAMIC_PROXY_FACTORY=>PREPARE_ATTR_AND_SIGNATURE
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD prepare_attr_and_signature.DATA:ls_attribute  LIKE LINE OF mt_attribute,ls_parameter  LIKE LINE OF mt_parameters,ls_method     LIKE LINE OF mt_methods.ls_method-clsname = mv_new_class_name.ls_method-cmpname = 'CONSTRUCTOR'.ls_method-state = 1. "implementedls_method-exposure = 2. "publicAPPEND ls_method TO mt_methods.ls_parameter-clsname = mv_new_class_name.ls_parameter-cmpname = 'CONSTRUCTOR'.ls_parameter-version = 1.ls_parameter-descript = 'Constructor automatically generated by Jerry'.ls_parameter-type = 'OBJECT'."mv_interface_name.ls_parameter-sconame = 'IO_ORIGIN'.ls_parameter-cmptype = 1. "METHODls_parameter-mtdtype = 0. "METHODls_parameter-pardecltyp = 0. "IMPORTINGls_parameter-parpasstyp = 1. "pass by referencels_parameter-typtype = 3. "type ref toAPPEND ls_parameter TO mt_parameters.ls_attribute-clsname = mv_new_class_name.ls_attribute-cmpname = 'MO_ORIGIN'.ls_attribute-state = 1.ls_attribute-attdecltyp = 0.ls_attribute-attexpvirt = 0. "privatels_attribute-typtype = 3. "type ref tols_attribute-type = 'OBJECT'."mv_interface_name.APPEND ls_attribute TO mt_attribute.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Private Method ZCL_ABAP_DYNAMIC_PROXY_FACTORY=>PREPARE_SOURCE_CODE
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD prepare_source_code.DATA: ls_method_source TYPE seo_method_source,ls_imp_if        TYPE seor_implementing_r,ls_imp_det       TYPE seoredef.ms_vseoclass-clsname   = mv_new_class_name.ms_vseoclass-state     = seoc_state_implemented.ms_vseoclass-exposure  = seoc_exposure_public.ms_vseoclass-descript  = `Dynamic proxy generated by Jerry's code`.ms_vseoclass-langu     = sy-langu.ms_vseoclass-clsccincl = abap_true.ms_vseoclass-unicode   = abap_true.ms_vseoclass-fixpt     = abap_true.ms_vseoclass-clsfinal  = abap_true.ls_imp_det = ls_imp_if-clsname       = mv_new_class_name.ls_imp_det = ls_imp_if-refclsname    = mv_interface_name.ls_imp_if-state      = seoc_state_implemented.APPEND ls_imp_if TO mt_imp_if.CLEAR: ls_method_source.DATA: lv_name TYPE string.ls_method_source-cpdname = |{ mv_interface_name }~{ mv_method_name }|.APPEND |{ mv_pre_exit }| TO ls_method_source-source.APPEND |DATA(lo) = CAST { mv_interface_name }( mo_origin ).| to ls_method_source-source.APPEND 'lo->print( ).'  TO ls_method_source-source.APPEND |{ mv_post_exit }| TO ls_method_source-source.APPEND ls_method_source TO mt_sourcecode.CLEAR: ls_method_source.ls_method_source-cpdname = 'CONSTRUCTOR'.APPEND 'mo_origin = io_origin.' TO ls_method_source-source.APPEND ls_method_source TO mt_sourcecode.ENDMETHOD.
ENDCLASS.

工具类zcl_abap_cglib_tool

这个类是Jerry仿照Java CGLIB(Code Generation Library)创建的, 针对传入的一个ABAP类,能创建一个生命周期只有当前会话(current session)内的代理类,该代理类是传入ABAP类的子类。这意味着传入的ABAP类必须能够被继承,不能被标记为final.

CLASS zcl_abap_cglib_tool DEFINITIONPUBLICFINALCREATE PUBLIC .PUBLIC SECTION.CLASS-METHODS get_proxyIMPORTING!iv_class_name  TYPE string!io_pre_exit    TYPE REF TO if_preexit!io_post_exit   TYPE REF TO if_postexitRETURNINGVALUE(ro_proxy) TYPE REF TO object .PROTECTED SECTION.PRIVATE SECTION.CLASS-DATA mv_class_name TYPE string .CLASS-DATA mt_source TYPE seop_source_string .CLASS-DATA mo_proxy TYPE REF TO object .CLASS-DATA mo_preexit TYPE REF TO if_preexit .CLASS-DATA mo_postexit TYPE REF TO if_postexit .CLASS-METHODS generate_proxy .CLASS-METHODS get_source_code .
ENDCLASS.CLASS ZCL_ABAP_CGLIB_TOOL IMPLEMENTATION.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Private Method ZCL_ABAP_CGLIB_TOOL=>GENERATE_PROXY
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD generate_proxy.DATA(lv_new_cls_name) = mv_class_name && '_SUB'.DATA(lv_inherit) = |inheriting from { mv_class_name }|.TRANSLATE lv_new_cls_name TO UPPER CASE.TRY.LOOP AT mt_source ASSIGNING FIELD-SYMBOL(<source1>) WHERE table_line CS mv_class_name.REPLACE mv_class_name IN <source1> WITH lv_new_cls_name.ENDLOOP.LOOP AT mt_source ASSIGNING FIELD-SYMBOL(<source>) WHERE table_line CS mv_class_name.DELETE mt_source INDEX ( sy-tabix + 1 ).INSERT lv_inherit INTO mt_source INDEX ( sy-tabix + 1 ).EXIT.ENDLOOP.GENERATE SUBROUTINE POOL mt_source NAME DATA(prog).WRITE: / sy-subrc.DATA(class) = |\\PROGRAM={ prog }\\CLASS={ lv_new_cls_name }|.CREATE OBJECT mo_proxy TYPE (class).CALL METHOD mo_proxy->('SET_PREEXIT')EXPORTINGio_preexit = mo_preexit.CALL METHOD mo_proxy->('SET_POSTEXIT')EXPORTINGio_postexit = mo_postexit.CATCH cx_root INTO DATA(cx_root).WRITE: / cx_root->get_text( ).ENDTRY.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_ABAP_CGLIB_TOOL=>GET_PROXY
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_CLASS_NAME                  TYPE        STRING
* | [--->] IO_PRE_EXIT                    TYPE REF TO IF_PREEXIT
* | [--->] IO_POST_EXIT                   TYPE REF TO IF_POSTEXIT
* | [<-()] RO_PROXY                       TYPE REF TO OBJECT
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD get_proxy.mv_class_name = iv_class_name.mo_preexit = io_pre_exit.mo_postexit = io_post_exit.CLEAR: mo_proxy.get_source_code( ).generate_proxy( ).ro_proxy = mo_proxy.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Private Method ZCL_ABAP_CGLIB_TOOL=>GET_SOURCE_CODE
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD get_source_code.DATA:cifkey      TYPE seoclskey,clstype     TYPE seoclstype,source      TYPE seop_source_string,pool_source TYPE seop_source_string,l_string    TYPE string,source_line TYPE LINE OF seop_source_string,tabix       TYPE sytabix,includes    TYPE seop_methods_w_include,include     TYPE seop_method_w_include,cifref      TYPE REF TO if_oo_clif_incl_naming,clsref      TYPE REF TO if_oo_class_incl_naming,intref      TYPE REF TO if_oo_interface_incl_naming.cifkey-clsname = mv_class_name.CALL METHOD cl_oo_include_naming=>get_instance_by_cifkeyEXPORTINGcifkey = cifkeyRECEIVINGcifref = cifrefEXCEPTIONSOTHERS = 1.ASSERT sy-subrc = 0.APPEND 'program.' TO mt_source.CHECK cifref->clstype = seoc_clstype_class.clsref ?= cifref.READ REPORT clsref->class_pool INTO pool_source.READ REPORT clsref->locals_old INTO source.LOOP AT source INTO source_line.IF source_line NS '*"*'.APPEND source_line TO mt_source..ENDIF.ENDLOOP.READ REPORT clsref->locals_def INTO source.LOOP AT source INTO source_line.IF source_line NS '*"*'.APPEND source_line TO mt_source..ENDIF.ENDLOOP.READ REPORT clsref->locals_imp INTO source.LOOP AT source INTO source_line.IF source_line NS '*"*'.APPEND source_line TO mt_source..ENDIF.ENDLOOP.READ REPORT clsref->public_section INTO source.LOOP AT source ASSIGNING FIELD-SYMBOL(<source_line>).IF <source_line> NS '*"*'.FIND REGEX '.*methods.*\.' IN <source_line> MATCH LENGTH DATA(lv_len).IF sy-subrc = 0.lv_len = lv_len - 1.<source_line> = <source_line>+0(lv_len).CONCATENATE <source_line> 'redefinition' '.' INTO <source_line> SEPARATED BY space.ENDIF.APPEND <source_line> TO mt_source.ENDIF.ENDLOOP.APPEND 'methods SET_PREEXIT importing !IO_PREEXIT type ref to IF_PREEXIT .' TO mt_source.APPEND 'methods SET_POSTEXIT importing !IO_POSTEXIT type ref to IF_POSTEXIT .' TO mt_source.READ REPORT clsref->protected_section INTO source.LOOP AT source INTO source_line.IF source_line NS '*"*'.APPEND source_line TO mt_source.ENDIF.ENDLOOP.READ REPORT clsref->private_section INTO source.LOOP AT source INTO source_line.IF source_line NS '*"*'.APPEND source_line TO mt_source.ENDIF.ENDLOOP.APPEND 'data MO_PREEXIT type ref to IF_PREEXIT .' TO mt_source.APPEND 'data MO_POSTEXIT type ref to IF_POSTEXIT .' TO mt_source.CONCATENATE 'CLASS' cifkey 'IMPLEMENTATION' INTO l_string SEPARATED BY space.LOOP AT pool_source FROM tabix INTO source_line.IF source_line CS 'ENDCLASS'.APPEND source_line TO mt_source..ENDIF.IF source_line CS l_string.SKIP.APPEND source_line TO mt_source..tabix = sy-tabix.EXIT.ENDIF.ENDLOOP.includes = clsref->get_all_method_includes( ).LOOP AT includes INTO include.READ REPORT include-incname INTO source.INSERT 'mo_preexit->execute( ).' INTO source INDEX 2.INSERT 'mo_postexit->execute( ).' INTO source INDEX ( lines( source ) ).LOOP AT source INTO source_line.APPEND source_line TO mt_source..ENDLOOP.ENDLOOP.APPEND 'method set_preexit.  mo_preexit = IO_PREEXIT. endmethod.' TO mt_source.APPEND 'method set_postexit.  mo_postexit = IO_POSTEXIT. endmethod.' TO mt_source.LOOP AT pool_source FROM tabix INTO source_line.IF source_line CS 'ENDCLASS'.APPEND source_line TO mt_source..ENDIF.ENDLOOP.ENDMETHOD.
ENDCLASS.

Jerry Wang的ABAP专题文章

  • Jerry的ABAP, Java和JavaScript乱炖

  • ABAP开发人员未来应该学些什么

  • Jerry 2017年的五一小长假:8种经典排序算法的ABAP实现

  • Jerry的ABAP原创技术文章合集

  • 300行ABAP代码实现一个最简单的区块链原型

  • 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数

  • 在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务

  • ABAP vs Java, 蛙泳 vs 自由泳

  • 聊聊C语言和ABAP

  • 动手使用ABAP Channel开发一些小工具,提升日常工作效率

  • 我用ABAP做过的那些无聊的事情

  • 不喜欢SAP GUI?那试试用Eclipse进行ABAP开发吧

  • 使用Visual Studio Code编写和激活ABAP代码

  • 你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧

  • 在SAP云平台ABAP编程环境上编写第一段ABAP程序

  • SAP官方发布的ABAP编程规范

  • ABAP Code Inspector那些隐藏的功能,您都知道吗?

  • 还在用ABAP进行SAP产品的二次开发?来了解下这种全新的二次开发理念吧

  • ABAP Netweaver体内的那些寄生式编程语言

  • 从SAP社区上的一篇博客开始,聊聊SAP产品命名背后的那份情怀

  • 云端的ABAP Restful服务开发

  • 如何在SAP云平台ABAP编程环境里把CDS view暴露成OData服务

  • 使用abapGit在ABAP On-Premises系统和SAP云平台ABAP环境之间进行代码传输

  • 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用

  • Jerry带您了解Restful ABAP Programming模型系列之二:Action和Validation的实现

  • Jerry带您了解Restful ABAP Programming模型系列之三:云端ABAP应用调试

  • SAP云平台上的ABAP编程环境里如何消费第三方服务

  • ABAP开发者上云的时候到了 - 现在大家可以免费使用SAP云平台ABAP环境的试用版了

  • 学而不思则罔 - SAP云平台ABAP编程环境的由来和适用场景

  • SAP云平台里的三叉戟应用

  • 如何基于Restful ABAP Programming模型开发并部署一个支持增删改查的Fiori应用

  • SAP 2019 TechEd Key Note解读:云时代下SAP从业人员如何做二次开发?

  • 有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?

  • ABAP开发环境终于支持以驼峰命名法自动格式化ABAP变量名了

  • 利用ABAP 740的新关键字REDUCE完成一个实际工作任务

  • 一段让人瑟瑟发抖的ABAP代码

  • 昨日万圣节ABAP怪兽级代码谜团,公布答案啦

  • 介绍一种在ABAP内核态进行内表高效拷贝的方法

  • 使用SAP Cloud Application Programming模型开发OData的一个实际例子

  • 当ABAP遇见普罗米修斯

  • 使用ABAP绘制可伸缩矢量图

  • ABAP开发环境语法高亮的那些事儿

  • SAP错误消息调试之七种武器:让所有的错误消息都能被定位

  • 使用ABAP操作Excel的几种方法

  • SAP GUI里的收藏夹事务码管理工具

  • SAP GUI和Windows注册表

  • 有了Debug权限就能干坏事?小心了,你的一举一动尽在系统监控中

  • ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX这些东东是什么鬼

  • 实现ABAP条件断点的三种方式

  • 使用SAT跟踪监控从浏览器打开的SAP应用的性能和调用栈

  • 一个13年ABAP老兵的建议:了解这些基础知识,对ABAP开发有百利而无一害

  • SAP ABAP Netweaver容器化, 不可能完成的任务吗?

  • SAP产品增强技术回顾

  • SAP API开发方法大全

Jerry文章《浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP面向切面编程的尝试一文的源代码》相关推荐

  1. 浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP面向切面编程的尝试

    文章目录 Java的静态代理 静态代理的优缺点 ABAP的静态代理 Spring AOP的动态代理 JDK动态代理的优缺点 CGLIB动态代理的优缺点 ABAP CGLIB的模拟实现 ABAP Pre ...

  2. final类是否可以被代理_浅谈Java【代理设计模式】——看这篇文章就懂了

    什么是代理模式 为其他对象提供一种代理以控制对这个对象的访问. 为什么使用代理模式 中介隔离:在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的 ...

  3. java 中的单元测试_浅谈Java 中的单元测试

    单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...

  4. java bitset用途_浅谈Java BitSet使用场景和代码示例

    搜索热词 @H_502_0@一.什么是BitSet? @H_502_0@ 注:以下内容来自JDK API: @H_502_0@ BitSet类实现了一个按需增长的位向量.位Set的每一个组件都有一个b ...

  5. java虚拟机类加载机制浅谈_浅谈Java虚拟机(三)之类加载机制

    在<浅谈Java虚拟机>这篇文章中,我们提到了JVM从操作系统方面来说,可以将其看做是一个进程,分别有类加载器子系统,执行引擎子系统和垃圾收集子系统.这一篇文章就简单的来谈一下类加载器子系 ...

  6. java手动回收_浅谈java是如何做资源回收补救的

    学习java的过程,我们经常谈论一个对象的回收,尤其是资源类型,如果没有显示的关闭,对象就被回收了,说明出现了资源泄漏.java本身为了防止这种情况,做了一些担保的方式,确保可以让未关闭的资源合理回收 ...

  7. 浅谈JAVA程序破解(原创)

    浅谈JAVA程序破解 作者:舵手 申明:如转载请保证文章的完整性以及出处 最近对JAVA程序的破解比较感兴趣,拿几个行业软件练了一下手,略有心得,拿出来与菜鸟分享!注意只是一点心得, 本文并不涉及具体 ...

  8. 浅谈JAVA程序破解

    浅谈JAVA程序破解 http://www.blogjava.net/galaxyp/archive/2006/04/19/41833.html 作者:舵手 申明:如转载请保证文章的完整性以及出处 最 ...

  9. 浅谈 Java VM 发展

    浅谈 Java VM 发展 Jim Huang <jimchyun @ ccns.ncku.edu.tw> <jserv @ kaffe.org> 略为整理笔者对 Java V ...

最新文章

  1. VPLS(Virtual Private LAN Service)
  2. Python学习日志(5)- Numpy
  3. SUN平台,光纤共享存储互斥失败导致的数据灾难恢复
  4. 经Apache将tomcat转用80port这两个域名
  5. 1对1直播系统-C135 直播源码-含安卓IOS双端
  6. linux+echo+权限不够,解决linux echo命令以及linux echo命令提示权限不够的方法
  7. Android NDK开发之 opencv manage 免安装生成opencv应用
  8. [原] 求薪水第三高的雇员的SQL题(图解)
  9. 桌面无法显示计算机,win10 桌面计算机无法显示
  10. jsp如何编写java代码_如何在JSP页面内编写java代码?(代码示例)
  11. 软件测试团队队名,电子设计大赛队名
  12. 接口性能测试方案分析
  13. 无线电波传播:频段、方式、衰落|瑞利分布、瑞利衰落非复制的解释
  14. 基于DirectShow实现的视频捕捉与采集
  15. 上拉/下拉电阻选值怎么定
  16. 机器学习:02 特征工程和决策树回归
  17. 大数据仓库之拉链表讲解与举例说明【基础部分】
  18. 【镜像取证篇】常见镜像文件类型
  19. windows10_小屏幕显示不可调整的大窗口(老软件)/widows字体大小调整
  20. BigWorld用到的其他库

热门文章

  1. CentOS允许某一端口接受外部链接
  2. 机房系统(五)——【Excel表导出】
  3. BZOJ4860 Beijing2017树的难题(点分治+单调队列)
  4. P1387 最大正方形
  5. SQL Server 跨库查询
  6. IE hack 条件语句
  7. css3加载ing动画
  8. Failed to issue method call: Unit httpd.service failed to load: No such file or directory.
  9. SQL Server 2008中的代码安全(四):主密钥
  10. C#不为人知的秘密-缓冲区溢出