|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
而学习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#程序员都明白一点 |
|