这两天比较无聊,随便找点东西进行学习。目标就瞄准了javassist。关于javassist的介绍google一下,这里也不介绍了。
对于某一个类,直接在编译好的.class文件插入一些内容。
比如:
package test.param; public class Screen { public void draw(int i , int j){ System.out.println("move to i,j"); } }
对于这个对象,我现在想在输出之前,把i,和j的值输出出来。如何使用javassist进行操作呢?
package test.param; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import javassist.CannotCompileException; import javassist.ClassPool; import javassist.CtClass; import javassist.CtMethod; import javassist.NotFoundException; public class Test { public static void main(String[] args) throws NotFoundException, CannotCompileException, IOException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException { ClassPool pool = ClassPool.getDefault(); CtClass ctClass = pool.get("test.param.Screen"); CtMethod ctm = ctClass.getDeclaredMethod("draw"); ctm.insertBefore("{System.out.println(\"i=\"+($1)+\",j=\"+$2);}"); ctClass.writeFile();//这里我不知道为什么写不到文件里,很纳闷。 Method m = ctClass.toClass().getMethod("draw",Integer.TYPE,Integer.TYPE); Screen s = new Screen(); m.invoke(s, 1,2); } }
执行这个main方法的时候,输出结果就是这样:
i=1,j=2
move to i,j
一个简单的例子,稍微熟悉一下javassist.
相关推荐
在使用Eclipse搭建Hibernate框架时,确保正确配置所需的jar包至关重要。本文将详细介绍如何在Eclipse环境中搭建Hibernate,并列举出支持Oracle数据库所需的19个jar包。 首先,我们需要理解Hibernate的工作原理。...
### ExtJS_MVC框架的搭建实例 #### 一、引言 随着Web应用的发展,越来越多的企业选择使用MVC架构来构建复杂的应用系统。其中,ExtJS作为一种强大的客户端框架,能够帮助开发者快速构建出美观且功能丰富的用户界面。...
使用Seasar2的基本功能,如S2Container和S2AOP,需要在CLASSPATH中包含特定的库文件,包括aopalliance、commons-logging、javassist、ognl、s2-framework等。如果要利用Seasar2的扩展功能,如S2JTA、S2DBCP、S2JDBC...
3. **javassist.jar**:动态类生成和修改工具,Hibernate使用它来实现运行时的类增强。 4. **cglib-nodep.jar**:另一个动态代理库,用于无法使用Java反射机制的情况下生成子类。 总结,"hibernate-3.2.6.ga.zip...
`org.eclipse.swt`是Eclipse项目的一部分,是一个用于构建跨平台GUI应用程序的库。它为Java提供了一种与操作系统交互的方式,支持Windows、Linux和Mac OS等平台。学习`swt.jar`可以帮助你创建功能丰富的桌面应用程序...
在实际开发中,将这些jar包添加到项目的类路径(ClassPath)是至关重要的,这可以通过IDE(如Eclipse或IntelliJ IDEA)的配置,或者在构建脚本(如Maven或Gradle)中声明依赖来完成。正确设置后,开发者就可以利用...
4. javassist.jar:另一种用于动态生成类的库,某些版本的Hibernate可能使用它。 5. antlr-2.7.7.jar:解析和生成语法树的库,用于HQL解析。 6. dom4j-1.6.1.jar:XML处理库,Hibernate用它来处理XML配置文件。 7. ...
- Eclipse Memory Analyzer (MAT) 是一款强大的Java内存分析工具,能够帮助开发者识别和解决内存泄漏等问题。 - VisualVM 是另一款强大的工具,它提供了一个统一的界面来监控和故障排查运行中的Java应用程序。特别是...
- **Java诊断工具**: Eclipse Memory Analyzer (MAT) 和 VisualVM 等工具可以帮助开发者诊断内存泄漏等问题。 ##### 1.2 Java基础知识 - **阅读源代码**: 了解Java核心库的实现细节对于深入理解Java语言至关重要。...
- **Java诊断工具**:例如Eclipse Memory Analyzer (MAT)可以帮助分析Java应用程序的内存使用情况;VisualVM提供了一个用户友好的界面来监控和调试JVM运行的应用程序。 - 通过编写特定类型的异常程序(如...
- `javassist.jar`:Hibernate使用的字节码操作库。 - 数据库驱动jar,如`mysql-connector-java.jar`或`ojdbc.jar`等,根据实际使用的数据库选择相应的驱动。 4. **其他依赖**: - `commons-logging.jar`:日志...
2. `com.springsource.javassist-3.15.0.GA.jar`:这是一个Java字节码操作和分析框架,Hibernate使用它来实现动态代理和类的增强。 3. `...
Hibernate利用Java的字节码增强技术(如javassist或CGLIB),在运行时动态生成和修改字节码,实现对对象的透明持久化。这种技术允许Hibernate在对象实例化时自动插入数据库操作的代码,如保存、更新和删除,从而提高...
7. **javassist.jar**:这是一个代码生成和字节码操作库,Hibernate使用它在运行时动态生成代理类,以实现延迟加载、动态SQL等功能。 8. **slf4j-api.jar**和相应的实现库(如logback-classic.jar):提供了日志...
Cglib是一个强大的Java代码生成库,它在运行时动态创建子类,为现有类提供扩展功能。这个库被广泛用于实现AOP(面向切面编程...在这些情况下,可以考虑使用Java的动态代理或者其他的字节码库,如Javassist或ByteBuddy。
- **创建Web项目**:使用IDE(如Eclipse或IntelliJ IDEA)创建一个新的Web项目。 - **添加Struts2组件包**:包括struts2-core、xwork、ognl、freemarker、javassist等必要的jar包。 - **配置web.xml**:添加Struts2...
- **Eclipse**:在单元测试和性能分析等方面使用。 - **面向切面编程(AOP)**:如AspectJ和AspectWerkz。 - **大多数Java性能分析工具**:如JProbe、Optimizeit、JProfiler等。 #### Java类文件结构简介 Java类文件...