【问题标题】:How to instantiate a class being "annotation processed"?如何实例化一个正在“处理注释”的类?
【发布时间】:2012-11-28 03:37:51
【问题描述】:

我正在编写一个注释处理器,我需要实例化一个正在处理的类。

我正在根据类及其注释提取一些文档,我想从该类运行一个方法并将结果输出到生成的文档中。

不幸的是,当我尝试实例化它时,我有一个ClassNotFoundException,这对我来说似乎是合乎逻辑的,因为处理发生在编译轮之前。

我目前正在编写一个包含文档的 xml 文件,也许有注释后处理器或类似的东西?

您有任何解决方法的想法吗?

【问题讨论】:

  • 您能否更具体地说明为什么您要实例化它?您将永远无法实例化您正在编译的类,所以也许一个更好的问题是,“我怎样才能在不实例化这些类的情况下执行 X?”
  • 我想生成一个可以被注解服务生成的json消息的例子
  • 好吧,您可以访问注释处理器(源元数据)中的字段及其类型。您不必在示例 JSON 中具有显式值,因为它是一个很好的示例,所以也许您可以使用该信息生成一个 JSON 字符串?另一种选择可能是使用 BCEL 从源元数据动态创建一个类,以用作生成 JSON 的临时占位符。自从我在注释处理器上工作已经有一段时间了,所以我不能提供太多的代码,抱歉。

标签: java annotations code-generation annotation-processing


【解决方案1】:

好吧,当然,我们不能访问正在处理的类,因为同时它正在编译。

并且在编译回合之后没有办法运行注释处理器。

然后我在 maven 中搜索并发现了阶段:process-classes

它是在编译成功后立即执行的,因此非常适合我的需求。在此阶段,我执行一个 java 类,该类读取我在注释处理期间生成的 xml 文件。此时我可以访问所有内容!

【讨论】:

    猜你喜欢
    • 2021-10-16
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多