当前位置: 首页 > 面试题库 >

使用Java注释-生成代码

谯阳伯
2023-03-14
问题内容

我正在使用Java 6注释处理API。我遵循了以下出色的教程,以创建用于在构建时显示消息的注释处理器:

http://kerebus.com/2011/02/using-java-6-processors-in-
eclipse/

但是,就我而言,我有一个简单的类:

import java.lang.annotation.ElementType;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(value = ElementType.METHOD)
public @interface Criteria {
    String id();
    double width();
    double height();
}

如您所见,使用元注释“ Retention”在运行时使JVM可以使用上述注释。我在另一个类的源代码中使用此“标准”注释来注释方法,如下所示:

@Criteria(id = "fooBar", 
    width = 22, 
    height = 10
)
public void fooStream() {       
    System.out.println("foo stream method");
}

在运行时,仅在传入的变量与@Criteria批注中元素的值(即“ width”和“ height”)匹配时,我才想在另一个类中包括“
fooStream”方法。我的问题是,如何在运行时使用方法’fooStream’并将其注入到另一个类中?这有可能吗?我没有在寻找任何代码示例,只是回答了上述两个问题。另外,在顶部的链接中,有一个使用’JavaFileObject’和’Writer’实例生成代码的示例,其中生成的代码作为字符串传递。


问题答案:

如果要对 类进行
运行时修改,则可以使用自己的类加载器并拦截类的加载,进行内部检查并使用asm库(而不是原始类)生成新的字节码。这不是很棘手,但是您必须确保确实需要它。



 类似资料:
  • 本文向大家介绍MyBatisPlus3.x中使用代码生成器(全注释),包括了MyBatisPlus3.x中使用代码生成器(全注释)的使用技巧和注意事项,需要的朋友参考一下 场景 MyBaitsPlus3.x与2.x是不一样的。这里使用3.0.1版本。 官方文档 https://mp.baomidou.com/guide/generator.html 这里在IDEA上的SpringBoot项目中进行

  • 我在使用gradlew(4.10.2)+dagger(2.18)时遇到了一个奇怪的问题。 问题是当我打电话的时候: /commonmodule_providesgsonFactory.java:6:错误:包javax.annotation.processing不存在导入javax.annotation.processing.generated; /commonmodule_providesgson

  • 问题内容: 我正在寻找一种生成代码的解决方案。我已经用谷歌搜索,搜索了SO和一些博客,但没有找到一个好的解决方案。 我想在类上添加注释,并且在编译时,一些方法和属性会自动添加到类中。 我正在寻找的解决方案的要点: 生成的代码可定制(强制) 无需调用任何外部工具(强制性) 仅JDK,无第三方框架( 强制 选配) 注释名称可自定义(可选) 例如 : 编译后,我的课看起来像这样: 编辑: 最后,我将我的

  • 我正在编写一个简单的java注释处理器,它使用JavaPoet生成java类,然后将其写入文件管理器。 这个注释处理器正在将文件保存到中,而不是 我尝试将maven编译器插件中目录设置为生成的sources目录,但它仍然在class文件夹中生成它。 如何将生成的类保存在生成的源文件夹中?

  • 问题内容: 出于调试的原因,我想一时兴起,将某些信息 包含在HTML注释中包含 的Wicket页面的HTML输出中。 输出将类似于… …其中“ 1234”是一些有趣的动态创建的信息。 我尝试了,但无济于事: →Wicket抱怨HTML页面缺少ID为“ foo”的元素 括入→这样的部分不能包含带有 →Wicket完全不输出标签 → 并逃脱 因此,您可以轻松地使用Wicket进行此操作,还是应该忘掉它