Nutz: 一个很不错的SSH替代方案
http://code.google.com/p/nutz/
研究了一段时间了, 整个项目现时只依赖
javassist.
但是,javassist的确很大,300多k, 整个nutz才500k, 有喧宾夺主之意.
而, nutz依赖javassist只有Aop.
故, 我在闲暇之余, 用asm 3.2实现了nutz的aop部分.
实现效果: 约30K, 压缩后15k, 加上asm 3.2的43k, 加起来不到60K. (*^__^*) 嘻嘻……
换句话说, 如果
换上这个实现, nutz+asm 才 640k左右. O(∩_∩)O哈哈~ 狂笑中
整个aop的实现, 分成几个部分:
1. 写入模板字段
2. 继承父类的构造方法
3. 覆写需要aop拦截的方法
4. 写入模板方法
5. 生成类的二进制数据, 交给ClassLoader生成Class实例
6. 注入模板字段的值
完成!
代码在:
http://code.google.com/p/nutzlab/source/browse/#svn/trunk/Nutz.Aop-ASM
或者可以在附件中找到源码. 版本rev 81
代码片段1:
public byte[] toByteArray(){
addField();
addConstructors();
addAopMethods();
enhandMethod();
return cw.toByteArray();
}
代码片段2(写入其中一个模板方法):
static void addMethod_before(ClassVisitor cv, String _Nut_myName){
MethodVisitor mv = cv.visitMethod(ACC_PRIVATE + ACC_VARARGS, "_Nut_before", "(I[Ljava/lang/Object;)Z", null, null);
mv.visitCode();
mv.visitFieldInsn(GETSTATIC, _Nut_myName, "_$$Nut_methodArray", "[Ljava/lang/reflect/Method;");
mv.visitVarInsn(ILOAD, 1);
mv.visitInsn(AALOAD);
mv.visitVarInsn(ASTORE, 3);
mv.visitFieldInsn(GETSTATIC, _Nut_myName, "_$$Nut_methodInterceptorList", "[Ljava/util/List;");
mv.visitVarInsn(ILOAD, 1);
mv.visitInsn(AALOAD);
mv.visitVarInsn(ASTORE, 4);
mv.visitInsn(ICONST_1);
mv.visitVarInsn(ISTORE, 5);
mv.visitVarInsn(ALOAD, 4);
mv.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "iterator", "()Ljava/util/Iterator;");
mv.visitVarInsn(ASTORE, 7);
Label l0 = new Label();
mv.visitJumpInsn(GOTO, l0);
Label l1 = new Label();
mv.visitLabel(l1);
mv.visitFrame(F_FULL, 8, new Object[] { _Nut_myName, INTEGER, "[Ljava/lang/Object;", "java/lang/reflect/Method", "java/util/List", INTEGER, TOP, "java/util/Iterator" }, 0, new Object[] {});
mv.visitVarInsn(ALOAD, 7);
mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Iterator", "next", "()Ljava/lang/Object;");
mv.visitTypeInsn(CHECKCAST, "org/nutz/aop/MethodInterceptor");
mv.visitVarInsn(ASTORE, 6);
mv.visitVarInsn(ILOAD, 5);
mv.visitVarInsn(ALOAD, 6);
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 3);
mv.visitVarInsn(ALOAD, 2);
mv.visitMethodInsn(INVOKEINTERFACE, "org/nutz/aop/MethodInterceptor", "beforeInvoke", "(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Z");
mv.visitInsn(IAND);
mv.visitVarInsn(ISTORE, 5);
mv.visitLabel(l0);
mv.visitFrame(F_SAME, 0, null, 0, null);
mv.visitVarInsn(ALOAD, 7);
mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Iterator", "hasNext", "()Z");
mv.visitJumpInsn(IFNE, l1);
mv.visitVarInsn(ILOAD, 5);
mv.visitInsn(IRETURN);
mv.visitMaxs(5, 8);
mv.visitEnd();
}
好. 欢迎拍砖. 狠狠地拍!!
分享到:
相关推荐
nutz-1.r.60.jar
2. `nutz-1.r.62-sources.jar`:提供了框架的源代码,开发者可以通过查看源码理解Nutz的内部实现,便于学习和调试。这对于深入理解和自定义框架行为非常有帮助。 3. `nutz-1.r.62-manual.pdf` 和 `nutz-1.r.62-...
nutz-1.r.62.jar 的jar包 可以解决中文乱码,设置字符编码等等
标题中的"nutz-1.r.61.r2.jar"是一个特定版本的Nutz框架的Java库文件。Nutz是一个开源的Java框架,它旨在简化Web开发,提供一系列实用工具和强大的支持,使得开发者能够更高效地进行业务逻辑处理。这个版本号"1.r.61...
Nutz 是一个轻量级的Java框架,它集成了MVC、ORM、DAO、AOP、IOC等核心功能,适用于构建各种类型的Web应用。Nutz的设计理念是简洁实用,它提供了丰富的API和工具,让开发者能更高效地进行开发工作。 2. **Nutz-1.r...
3. `nutz-1.r.58-sources.jar`:这个文件提供了Nutz框架的源代码,对于想要深入研究Nutz内部实现或者进行二次开发的开发者来说非常有价值。通过查看源码,开发者可以更直观地理解框架的工作原理,以便更好地利用和...
nutz-1.b.43-jdk5.jar 资源包
Nutz框架可以在WEB-INF/lib下仅使用一个nutz.jar来运行一个Web应用,前提是开发者自行添加必要的jar包,如连接池和数据库驱动等。对于那些希望尝试新东西、愿意成为NutzCommitters的开发者,Nutz提供了相应的指南和...
Nutz是一个轻量级、高性能的Java开发框架,它的核心组件包括了ORM、AOP、MVC等,为开发者提供了一套完整的开发工具集。在Java开发领域,JDK版本的选择至关重要,因为不同版本的JDK可能会影响到代码的兼容性和性能。...
Nutz 是一个全面而强大的Java开发框架,由国内开发者团队创建,旨在简化企业级Web应用的开发过程。Nutz 框架集成了许多功能,包括MVC、ORM、DAO、JSON、AJAX、安全控制等,为Java程序员提供了一站式的解决方案。...
- Aop:实现轻便快速的面向切面编程。 - Plugin:提供轻便的插件机制。 - Resource:支持资源扫描,且所有这些功能均不依赖第三方jar包。 3. Nutz框架的应用目标群体: - 如果开发中使用Hibernate觉得过于繁琐...
nutz-1.b.43-jdk5.jar 资源包
Nutz, 它是一组轻便小型的框架的集合。...如果你觉得 Java 语法不如 Ruby 便捷, Nutz.Castor 以及 Nutz.Lang 专为你设计 如果你以前根本没接触过 SSH ,只使用 JDBC 编程, 整个 Nutz 专门为你设计
Nutz是对于Java程序员来说,除SSH之外的另一个选择。当然,它是开源的,并且是完全免费的。同时也是商业友好的(Licensed under the Apache License, Version 2.0)。
该项目为全栈Java开发,采用Nutz框架实现Mvc/Ioc/Aop/Dao/Json一体化设计,源码包含2307个文件,涵盖1742个Java源文件、208个man文档、143个png图片、47个jpg图片、22个js脚本、21个psd设计文件、16个xml文件、13个...
在Nutz中,控制器通常是一个实现了`org.nutz.mvc.annotation.Controller`注解的类。例如,我们可以创建一个名为`HelloController`的类,其中有一个`hello`方法,这个方法使用`@Get`或`@Post`注解来指定HTTP请求类型...
Spring 里采用 Nutz.Dao ,又比如在 Nutz.Ioc 里使用 Hibernate 等整 -- 它所有功能均不依赖第三方 jar 文件。这就意味着:如果一个 Web 应用,你在 WEB-INF/lib 下只 需要放置一个 nutz.jar 就够了当然你要使用其它...
nutzboot1.65版jar包...............................................................................................希望对你有用