莫相离 发表于 2015-1-18 11:09:25

发布一篇AOP的利器:ASM 3.0先容

而学习JAVA我觉得最应该避免的就是:只学习,不思考,只记忆,不实践!
跟着AOP(AspectOrientedProgramming)的开展,代码静态天生已然成为Java天下中不成或缺的一环。本文将先容一种玲珑笨重的Java字节码操控框架ASM,它能便利地天生和改革Java代码。出名的框架,如Hibernate和Spring在底层都用到了ASM。比起传统的Java字节码操控框架,BCEL大概SERP,它具有更切合古代软件形式的编程模子和更迅捷的功能。
弁言
甚么是ASM?
ASM是一个Java字节码操控框架。它能被用来静态天生类大概加强既有类的功效。ASM能够间接发生二进制class文件,也能够在类被加载进Java假造机之前静态改动类举动。Javaclass被存储在严厉格局界说的.class文件里,这些类文件具有充足的元数据来剖析类中的一切元素:类称号、办法、属性和Java字节码(指令)。ASM从类文件中读进信息后,可以改动类举动,剖析类信息,乃至可以依据用户请求天生新类。
与BCEL和SERL分歧,ASM供应了更加古代的编程模子。关于ASM来讲,Javaclass被形貌为一棵树;利用“Visitor”形式遍历全部二进制布局;事务驱动的处置体例使得用户只必要存眷于对其编程成心义的部分,而不用懂得Java类文件格局的一切细节:ASM框架供应了默许的“responsetaker”处置这统统。
为何要静态天生Java类?
静态天生Java类与AOP亲切相干的。AOP的初志在于软件计划天下中存在这么一类代码,零星而又耦合:零星是因为一些私有的功效(诸如出名的log例子)分离在一切模块当中;同时改动log功效又会影响到一切的模块。呈现如许的缺点,很年夜水平上是因为传统的面向对象编程注意以承继干系为代表的“纵向”干系,而关于具有不异功效大概说方面(Aspect)的模块之间的“横向”干系不克不及很好地表达。比方,今朝有一个既有的银行办理体系,包含Bank、Customer、Account、Invoice等对象,如今要到场一个平安反省模块,对已有类的一切操纵之前都必需举行一次平安反省。
.ASM–AOP

但是Bank、Customer、Account、Invoice是代表分歧的事件,派生自分歧的父类,很难在高层上到场关于SecurityChecker的共有功效。关于没有多承继的Java来讲,更是云云。传统的办理计划是利用Decorator形式,它能够在必定水平上改良耦合,而功效仍然是分离的——每一个必要SecurityChecker的类都必需要派生一个Decorator,每一个必要SecurityChecker的办法都要被包装(wrap)。上面我们以Account类为例看一下Decorator:
起首,我们有一个SecurityChecker类,其静态办法checkSecurity实行平安反省功效:
public class SecurityChecker {
 public static void checkSecurity() {
 System.out.println("SecurityChecker.checkSecurity ...");
 //TODO real security check 
 }
}
另外一个是Account类:
public class Account {
 public void operation() {
 System.out.println("operation...");
 //TODO real operation 
 }
}
<p>
Java的B/s开发是通常是javaweb开发,又叫J2EE开发,J2SE是手机开发。C#的C/s和B/s开发是说.net和Asp开发。。u在这里说明一点;资深一点的Java和C#程序员都明白一点

谁可相欹 发表于 2015-1-20 15:20:48

其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。

若相依 发表于 2015-1-25 12:00:05

所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。

飘飘悠悠 发表于 2015-1-25 13:41:46

当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?

兰色精灵 发表于 2015-1-29 13:20:03

你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。

柔情似水 发表于 2015-1-30 22:27:32

所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。

小女巫 发表于 2015-2-2 11:14:11

Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。

活着的死人 发表于 2015-2-5 14:38:56

那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!

金色的骷髅 发表于 2015-2-12 06:41:35

设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧

小魔女 发表于 2015-3-2 23:11:15

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

透明 发表于 2015-3-11 07:18:30

J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。

深爱那片海 发表于 2015-3-17 23:08:08

我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。

乐观 发表于 2015-3-25 05:31:39

Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
页: [1]
查看完整版本: 发布一篇AOP的利器:ASM 3.0先容