首页 > 其他分享 >注解

注解

时间:2023-03-12 19:11:30浏览次数:33  
标签:10 自定义 当前 注解 ElementType 属性

注解

概述

/*
注解 = 注释 + 解释
	1. 给当前程序开发者提供必要的信息和标记
	2. 给Java 编译或者JVM 提供必要数据支持和标记
目前解除的注解
	【标记】
		@Override 
		@FunctionalInterface
		@Test
	【数据支持】
		@WebServlet(...)
		@RequestMapping(...) Spring MVC
		。。。
*/

注解的基本格式

自定义注解格式:
常用元注解(定义 自定义注解的注解)

@Documented // 表明注解参与Javadoc操作,可以生成对应的【Javadoc 文档】
@Retention(RetentionPolicy.SOURCE) // 表明注解参与的阶段:SOURCE 表示注解可以参与代码编译阶段,  // 存在于源码中,在class文件中不存在,不会加载到程序运行阶段。
// 默认使用 Class 表示 注解可以存在于字节码文件中,但不会参加程序运行。
// RUNTIME 参与生成字节码文件,,在字节码文件中存在,并且在程序运行中存在,可以利用【反射】获取相应的注解信息。
@Target(value = {...}) // annotationType 见下方表格
@Inherited // 表示当前注解是否会修饰的类或方法,被期子类继承注解。
public @interface MyAnnotation1 {

}

@Target表格,通过枚举ElementType来决定当前注解可以使用范围,一个注解可以用于多种类型之上:

ElementType 功能概述
ElementType.TYPE 表示当前注解可以用于类和接口,以及枚举
ElementType.FIELD 表示当前注解可以用于成员变量
ElementType.METHOD 表示当前注解可以用于成员方法
ElementType.PARAMETER 表示当前注解可以用于成员方法参数 @NotNull
ElementType.CONSTRUCTOR 表示当前注解可以用于构造方法
ElementType.ANNOTATION_TYPE 表示当前注解可以用于注解
ElementType.LOCAL_VARIABLE 表示当前注解可以用于局部变量
ElementType.PACKAGE 表示当前注解可以用于包

自定义注解中的属性Filed:

注解属性:

以方法之式,行变量之实,实则为方法。

注解属性允许的类型:

基本数据类型,String,注解,枚举,以上类型的数组

自定义注解演示属性操作

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyAnnotation {
    int value() default 10;
    String name() default ""; // 设置default默认值,使用注解时可以不初始化,自动使用默认值。
    int age(); // 可以不设置default,但是使用注解时必须初始化。
}
@MyAnnotation (value = 10, name = "wzh", age = 10)
// 或者
@MyAnnotaion (10, name = "wzh", age = 10)
class Demo{
    
}

/*
【注意】 
	如果在使用注解时,在其中不表明为那个属性赋值,默认是对VALUE属性赋值,如果自定义注解中没有定义VALUE属性,不表明赋值,则报错。所以一般在自定义时都定义value属性。
*/

利用反射 获取 注解相关内容 【重点】

Class<Demo> cls = Demo.class;
/*
Annotation getAnnotation(Class<A> annotationClass);
	通过Class对象获取指定注解类型的注解对象。
*/
MyAnnotation annotation = cls.getAnnotation(MyAnnotation.class);
// 获取属性
annotation.value();
annotation.name();
annotation.age();

标签:10,自定义,当前,注解,ElementType,属性
From: https://www.cnblogs.com/oneblogs/p/17208786.html

相关文章

  • 【Spring注解】@RequestBody和@RequestParam的区别
    SpringMVC中经常会用到@RequestBody和@RequestParam两个注解来获取请求的参数,那么这两个参数到底有什么区别呢?首先我们要知道GET请求与POST请求的区别GET请求......
  • 注解处理器 2:java 注解处理器
    前篇文档:注解处理器1:javax.lang.model包讲解概览注解处理器(AnnotationProcessorTool)是javac的一个工具,它用来在编译时扫描和处理注解(Annotation)。其生效的时间......
  • MybatisPlus中@TableField注解的使用
    实现官方文档说明:com.baomidou.mybatisplus.annotations.TableField 值描述value字段值(驼峰命名方式,该值可无)update预处理set字段自定义注入condition预处理WHERE实体......
  • aop+自定义注解实现数据源切换
    pom.xml依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"......
  • 用注解实现给对象动态添加方法
    来自《Java核心技术II高级特性》我们知道在GUI编程中,有很多对象的事件监听方法,类似下面:yellowButton.addActionListener(e->yellowBackground()); 首先我们先......
  • 注解与反射
    注解与反射注解注解Annotation是从JDK5.0开始引入的新技术.Annotation的作用:不是程序本身,可以对程序作出解释.(这一点和注释(comment)没什么区别)可以被其他程序(比......
  • 20.注解小记
    Json相关注解JsonInclude 如果不加这个注解:{"a":"111","b":1,"children":[]}加上注解并标记NON_EMPTY:{"a":"111","b":1}数据库相关注解Tab......
  • java自定义注解实现字段格式化(二)
    上篇java自定义注解实现字段格式化 我们自定义了另一个浮点数格式化的注解一、格式化处理器接口但在实际生产中,处理浮点数的格式化,可能还会有其他数据的格式化,比如日期......
  • Transactional注解
    1:@Transactional声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者......
  • Easypoi注解
    Easypoi引入依赖:<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId>......