Tag: bytecode

将动态参数传递给注释

我想知道是否有可能将动态值传递给注释属性。 我知道注释不是为了修改而设计的,但是我使用的是Hibernatefilter,并且在我的情况下,条件不是静态的。 我认为唯一的解决方案是使用librairies,其目的是读取和修改字节代码,如Javassist或ASM,但如果有另一个解决方案,它会好得多。 ps:在我的情况下的困难是我应该修改注释(属性的值),但我上面提到的librairies允许创建不编辑这就是为什么我想知道另一个解决方案 提前致谢

编译Java类时禁用编译时依赖性检查

考虑以下两个Java类: a.) class Test { void foo(Object foobar) { } } b.) class Test { void foo(pkg.not.in.classpath.FooBar foobar) { } } 此外,假设在类路径中找不到pkg.not.in.classpath.FooBar 。 第一个类将使用标准的javac进行编译。 但是,第二个类不会编译,javac会给你错误消息”package pkg.not.in.classpath does not exist” 。 在一般情况下,错误消息很好,因为检查依赖项允许编译器告诉您是否有一些方法参数错误等。 虽然很好,也很有帮助,但在编译时检查依赖项是非常严格需要AFAIK来生成上面示例中的Java类文件。 你能举一个例子,在没有执行编译时依赖性检查的情况下,在技术上不可能生成有效的Java类文件吗? 您是否知道有任何方法可以指示javac或任何其他Java编译器跳过编译时依赖性检查? 请确保您的答案解决了这两个问题。

ASM中的Java方法参数值

我试图获取Java程序的方法参数的值。 我正在使用ASM来检测字节码并获取这些值。 但是,我遇到了一些麻烦。 这是用于检测代码的visitCode()方法。 它正在做的是: 创建一个空数组以存储收集的参数。 对于每个参数,将其值加载到数组中。 将此数组发送到我的代理的OnMethodEntry方法(将使用值)。 。 @Override public void visitCode() { int paramLength = paramTypes.length; // Create array with length equal to number of parameters mv.visitIntInsn(Opcodes.BIPUSH, paramLength); mv.visitTypeInsn(Opcodes.ANEWARRAY, “java/lang/Object”); mv.visitVarInsn(Opcodes.ASTORE, paramLength); // Fill the created array with method parameters int i = 0; for (Type tp : paramTypes) { mv.visitVarInsn(Opcodes.ALOAD, paramLength); mv.visitIntInsn(Opcodes.BIPUSH, […]