问题标签 [javassist]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 以字符串形式获取 Java 类型的签名
我需要获取(作为字符串)某些 Java 类型的类型签名。
例如,这是某些ParameterizedType的类型签名:
在使用 Javassist 开发的应用程序的上下文中,我需要它。
为了更好地解释我在寻找什么,我展示了一个createGetter
使用 Javassist 为私有字段生成 getter 方法的方法的摘录。该字段的类型是参数化类型(即,它使用泛型)。
该createGetter
方法的第一个参数是字段的类型,第二个参数是字段的名称,第三个参数是应该添加该方法的类:
例如,如果我有一堂课
然后在调用createGetter
field 的方法后myField
,类变为:
生成的 getter 方法的返回类型应该与字段具有相同的通用签名(代码可以在没有具有相同字段通用签名的方法的情况下编译,因为只有相同的类对编译器来说很好。我需要它的原因具有相同类型的通用签名此处不解释)。
该createGetter
方法的代码说明,使用Javassist,为了设置一个方法的泛型类型签名,我需要首先获得一个String这样的类型签名(如果有其他方法请告诉我)。我知道 getter 方法应该具有的确切参数化类型,因为它与字段完全相同。但我有这样的类型作为ParameterizedType的实例。
我的问题是:在给定任意 Java Type的情况下,如何将这些类型签名作为字符串(包括类型参数数据)获得?
谢谢你的帮助。
java - 使用 javassist 创建非静态初始化程序
从我所见,我可以使用 javassist 在 java 类中创建一个新的静态初始化程序。但我需要的是一个非静态初始化程序。
因此,我不想添加: static{...} 到一个类,我只想添加 {..}
我想这样做的原因是因为我想创建一个类加载器,它返回由 ProxyFactory 包装的类,因为我必须向某些类添加一个处理程序。我的想法是将此代码添加到每个类的非静态初始化程序中: ((javassist.util.proxy.Proxy)this).setHandler(new library.proxy.Handler());
那么,任何想法如何添加非静态初始化程序?或者以不同的方式解决我的问题?非常感谢
java - Javassist:Bytecode.get() 不工作
bc.get()没有返回任何东西。我的目标是获取一个类的字节码。
java - 使用自定义类加载器配置 org.apache.log4j.ConsoleAppender
我有一个 java 类,它在启动时创建一个基于 javassist 类加载器的自定义类加载器,然后运行真正的程序类。我收到以下错误:
问题与一个对象是由原始类加载器创建的,而另一个是由自定义类加载器创建的这一事实有关。
有没有办法解决这个错误?
提前致谢,
阿夫纳
java - 将 javassist 字节码操作与 maven 编译集成
我有一个使用 javac / aspectj 编译器编译的 maven 项目。
我想在编译了 javassist 程序的类上运行,该程序操纵编译的类并向它们添加东西。
我想使用“进程类”阶段来运行我的工具。
我的问题是用 javassist 对“目标/类”中创建的类文件进行迭代的最佳方法是什么,以便之后我可以加载、修复和保存。
另一个要求是也在测试类上运行该工具。
如果有一个开源项目可以做类似的事情,那么看到一个活生生的例子会很棒。
谢谢,
阿夫纳
playframework - 在 WebSphere 8 上播放 1.2.x
我想将一个简单的 Play (1.2.4) 应用程序部署到 WebSphere 8。我让该应用程序在 Windows 上本地运行。两者都是 Java 1.6。我使用以下方法创建了一个 WAR 文件:
然后修改生成的 web.xml 以定义我的服务器数据源,再次构建 war 文件并部署。在部署期间,它从 web.xml 中找到了我的资源引用,并将其绑定到 WAS 定义的数据源。然后我将类加载器顺序更改为“最后一个父级”(基于 Play 部署选项页面和其他线程)。然后我启动了应用程序,没有任何错误。
我有一个类,它使用标记为@OnApplicationStart 的方法扩展 play.jobs.Job。当我通过 WAS 控制台启动新安装的应用程序时,它会启动并执行此方法,该方法连接到数据源并加载一些数据并将其放入缓存中。
当我尝试访问我的第一个控制器时,问题就出现了,我得到了这个错误:
这是我的相关控制器代码:
该错误似乎来自会话引用。请注意,引用 renderArgs 的注释行在活动时也会导致类似的错误。
javassist 是否在某处没有正确“增强”?我尝试用最新版本替换 javassist jar,结果相同。
我正在努力让 Play 在这里的“企业”中发挥作用,所以我真的很喜欢这个工作。截至 2012 年 9 月,我无法判断 Play 是否在 WAS8 上成功运行。我会考虑 Play 2 (java),但它似乎绝对不支持 WAS,并且插件 play2war 看起来也不支持 WAS。愚蠢的是,我们不能没有 WAS,但这是我们企业的现实。
更新:
我现在也尝试了 Play 1.2.5 并创建了一个新应用程序,并在 Application.index 方法中添加了一行 session.get("x") 。部署了war文件并在第一次访问时遇到了同样的错误。
powermock - Javassist 3.17.0-GA 何时可用
任何人都知道 Javassist 3.17.0-GA 何时可用?
Javaassit 中有一个错误(在 3.17.0-GA 中修复)在与 Java 7 一起使用时会破坏 PowerMock: https ://issues.jboss.org/browse/JASSIST-160?focusedCommentId=12718716&page=com.atlassian.jira .plugin.system.issuetabpanels:comment-tabpanel#comment-12718716
相关的 PowerMock 错误 http://code.google.com/p/powermock/issues/detail?id=355
instance - 如何在 javassist 中从 ctClass 制作 newInstance?
我可以举个例子:
但我需要通过 javassist 修改类:
现在,我想从 ctClass 创建一个实例。我该怎么做?
java - 使用 javassist 更改方法体的一部分
让我先解释一下我的目标......我需要更改方法主体的一部分,我的意思是,在方法内部我有几个调用,但只需要更改其中一个调用以使用两个参数而不是 1。因为我想在我想的方法中保持所有其余部分相同,获取方法主体,通过正则表达式更改这个特定的调用,我想更改并重新设置它。
假设这是这样做的好方法......我怎样才能得到方法体?
任何建议将不胜感激
谢谢
拉斐尔·莫伊塔
java - 为使用 Javassist 创建的新方法的参数添加注释
我需要为方法参数添加注释。该方法之前是使用 javassist 创建的,例如:
我要添加的注释非常简单:
1) 在方法创建中写注解 throws
2)找到了这个解决方案,但它基于在我的情况下返回null的行:
我迷失了如何做到这一点;有没有人找到一种方法来创建一个新方法并为其参数添加任何注释?
提前致谢。