美文网首页
java基础之注解

java基础之注解

作者: 墨线宝 | 来源:发表于2023-10-29 09:55 被阅读0次

注解

java中包含5种元注解

  • @Target 表示注解可用于哪些地方,包含TYPE(类)、METHOD(方法)、PARAMETER(参数)、CONSTRUCTOR(构造器)、FIELD(字段)、LOCAL_VARIABLE(局部变量)、ANNOTATION_TYPE、PACKAGE(包)、TYPE_PARAMETER、TYPE_USE

  • @Retention 表示注解信息保存的生命周期 SOURCE(注解被编译器丢弃)、CLASS(注解在class文件中可用,会被VM丢弃)、RUNTIME(VM在运行期也保留注解,可通过反射机制读取注解的信息)

  • @Documented 将此注解保存在Javadoc中

  • @Inherited 允许子类继承父类的注解

  • @Repeatable 允许一个注解可以被使用一次或多次

注解处理器用来处理注解进行工作,对于RUNTIME的注解可以在运行期操作,可以使用反射,而SOURCE和CLASS就只能在注解处理器Processor来操作了

注:注解处理器要和项目分开

注解处理器项目需要添加maven插件 该项目编译时不加载注解处理器,不然会报错

<plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <compilerArgument>
                        -proc:none
                    </compilerArgument>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin><plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <compilerArgument>
                        -proc:none
                    </compilerArgument>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

注解处理器注册

需要在resources下创建META-INF目录,创建services目录,创建javax.annotation.processing.Processor文件,在里面写上处理器的全路径

com.zhanghe.MyProcessor
@SupportedAnnotationTypes({"com.zhanghe.Test"}) // 支持哪些注解
@SupportedSourceVersion(SourceVersion.RELEASE_8) // 支持哪个版本
public class MyProcessor extends AbstractProcessor {

    private Filer filer;

    private Locale locale;

    private Elements elements;

    private Types types;

    private StandardJavaFileManager standardJavaFileManager;

    /**
     * 该方法再编译期间会被注入一个ProcessingEnvironment对象,该对象包含了很多有用的工具类。
     *
     * @param processingEnv
     */
    @Override
    public synchronized void init(ProcessingEnvironment processingEnv) {

        super.init(processingEnv);
        filer = processingEnv.getFiler();
        locale = processingEnv.getLocale();
        elements = processingEnv.getElementUtils();
        types = processingEnv.getTypeUtils();
        JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();
        DiagnosticCollector<JavaFileObject> collector = new DiagnosticCollector<>();
        standardJavaFileManager = javaCompiler.getStandardFileManager(collector, null, null);
    }

    /**
    * 相当于main方法
    */
    @Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
        for (TypeElement annotation : annotations) {
            System.out.println(annotation);

        }
        for (Element element : roundEnv.getElementsAnnotatedWith(Test.class)) {
            if (element.getKind() == ElementKind.CLASS) {
                TypeElement typeElement = (TypeElement) element;
                PackageElement packageElement = elements.getPackageOf(element);
                String packagePath = packageElement.getQualifiedName().toString();
                String className = typeElement.getSimpleName().toString();
                System.out.println("packagePath:" + packagePath);
                System.out.println("className:" + className);
            }
            System.out.println(element.getKind() +
                    " : " + element.getModifiers() +
                    " : " + element.getSimpleName() +
                    " : " + element.asType());
        }
        return false;
    }
}

准备使用注解处理器修改源文件,之后再研究

https://zhhll.icu/2020/java基础/注解/1.java基础之注解/

本文由mdnice多平台发布

相关文章

  • Java基础:反射

    反射注解动态代理相关阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 ...

  • Java基础:注解

    系列阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 1. 概述 注解...

  • 菜鸟学服务端技术----Spirng基础

    注解 Java基础加强总结(一)——注解(Annotation) java中的注解是如何工作的? java 注解 ...

  • 自定义注解

    java annotation基础 java注解分为标准注解和元注解。 标准注解是java为我们提供的预定义的注解...

  • Java注解+注解处理器

    Java注解基础注解处理器使用

  • Java注解解析-搭建自己的注解处理器(CLASS注解使用篇)

    写在前面 该文章讲解了如何处理源码注解(CLASS ),是继Java注解解析-基础+运行时注解(RUNTIME)之...

  • Java基础:动态代理

    系列阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 概述 在运行时,...

  • Java基础之注解

    1. 注解的写法 关注点 在interface前面加个@,来声明这是一个注解 注解中的第一行代码,是一个常量,并且...

  • JAVA基础之注解

    1、注解的作用 Annotation(注解)是JDK 5.0引入的特性,它的基本作用就是修饰编程元素。 注解相当于...

  • Java基础:类加载器

    系列阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 1. 什么是类加...

网友评论

      本文标题:java基础之注解

      本文链接:https://www.haomeiwen.com/subject/eifvidtx.html