自定义注解和注解的相关使用

自定义注解类MyAnnotation

 1 package lltse.base.annotationdemo;
 2
 3 import java.lang.annotation.Retention;
 4 import java.lang.annotation.RetentionPolicy;
 5
 6 //编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。
 7 @Retention(value=RetentionPolicy.RUNTIME)
 8 public @interface MyAnnotation
 9 {
10     //可以设置默认值,调用的时候即可不写此属性
11     String name() default "zhangsan";
12
13     //int 类型
14     //int age();
15
16     //value
17     //int value();
18
19     //数组
20     int [] value();
21
22 }

自定义注解类Table

 1 package lltse.base.annotationdemo;
 2
 3 import java.lang.annotation.Retention;
 4 import java.lang.annotation.RetentionPolicy;
 5
 6 //RetentionPolicy.RUNTIME 编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。
 7 //RetentionPolicy.CLASS 编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。这是默认的行为。
 8 //RetentionPolicy.SOURCE 编译器要丢弃的注释。
 9
10 @Retention(RetentionPolicy.RUNTIME)
11 public @interface Table
12 {
13     /*当此处的属性值仅有一个,且名称为value的时候。
14     调用此注解的时候不需要用value= 只需标出值即可。如:Table("tb_person")*/
15     //String value();
16
17     String name();
18
19 }

自定义注解的使用Student

 1 package lltse.base.annotationdemo;
 2
 3 //@MyAnnotation(name="lisi")
 4 //@MyAnnotation(age=30)
 5 //@MyAnnotation(30)
 6 @MyAnnotation({14,29,40})
 7 public class Student
 8 {
 9     private int num;
10
11     public int hashCode()
12     {
13         return num;
14     }
15
16     public boolean equals(Object o)
17     {
18         return true;
19     }
20 }

自定义注解的使用PersonEntity

 1 package lltse.base.annotationdemo;
 2
 3 @Table(name="db_person")
 4 public class PersonEntity
 5 {
 6     private String cardId;
 7
 8     private String sex;
 9
10     public String getCardId() {
11         return cardId;
12     }
13
14     public void setCardId(String cardId) {
15         this.cardId = cardId;
16     }
17
18     public String getSex() {
19         return sex;
20     }
21
22     public void setSex(String sex) {
23         this.sex = sex;
24     }
25
26
27 }

自定义注解的测试类AnnotationDemo

 1 package lltse.base.annotationdemo;
 2
 3 import java.util.Arrays;
 4
 5 public class AnnotationDemo {
 6
 7     /**
 8      * @param args
 9      */
10     public static void main(String[] args)
11     {
12         /*此处演示的是得到类的注解信息。
13         获取方法的注解和获取类的注解方式类似,先通过反射获取方法。
14         然后通过方法的getAnnotation获取方法的注解*/
15         Class clazz = Student.class;
16         MyAnnotation myAnnotation = (MyAnnotation)clazz.getAnnotation(MyAnnotation.class);
17         //myAnnotation.name()此处获取的值为注解定义设置的默认值
18         //System.out.println("  name:>>>>"+myAnnotation.name());
19         //System.out.println("  age:>>>>"+myAnnotation.age();
20         //System.out.println("  value:>>>>"+myAnnotation.value();
21         System.out.println("  value:>>>>"+Arrays.toString(myAnnotation.value()));
22
23
24         //Spring data jpa中即用这种注解方式。需要将表名获取作为条件使用
25         Class personClazz = PersonEntity.class;
26         Table table = (Table)personClazz.getAnnotation(Table.class);
27         System.out.println("Table name:>>>"+table.name());
28
29
30     }
31
32 }
时间: 2024-08-25 18:01:44

自定义注解和注解的相关使用的相关文章

JVM系列六(自定义插入式注解器).

一.概述 从前面 文章 中我们可以了解到,javac 的三个步骤中,程序员唯一能干预的就是注解处理器部分,注解处理器类似于编译器的插件,在这些插件里面,可以读取.修改.添加抽象语法树中的任意元素.因此,只要有足够的创意,程序员可以通过自定义插入式注解处理器来实现许多原本只能在编码中完成的事情.我们常见的 Lombok.Hibernate Validator 等都是基于自定义插入式注解器来实现的. 要实现注解处理器首先要做的就是继承抽象类 javax.annotation.processing.A

aop注解 自定义切面的注解写法

spring.xml中 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.spr

java自定义注解以及注解的简单介绍

jdk自带注解 @Override 覆盖父类的方法 @Deprecated  注解一个方法 表示该方法过时了 @Suppvisewarnings     @SupressWarnings("deprecation")//忽略警告 常见第三方注解 Spring: @Autowired   自动生成一个类的实例 @Service @Repository Mybatis: @InsertProvider @UpdateProvider @Options 注解的分类 运行机制化分 源码注解 注

Java魔法堂:自定义和解析注解

一.前言 注解(Annotation)作为元数据的载体,为程序代码本身提供额外的信息,使用过MyBatis等ORM框架的朋友对 @Insert 的注解应该不陌生了,这是MyBatis自定义的注解,显然我们也可以按需求自定义一些注解,然后对其进行解析获取元数据,进而实现通过代码生成代码的操作. 二.自定义注解 只需通过 关键字@interface 即可自定义注解 // 标识注解(就是无属性的注解) public @interface AnnotationWithoutProperty{ } //

SpringBoot08 请求方式、参数获取注解、参数验证、前后台属性名不一致问题、自定义参数验证注解、BeanUtils的使用

1 请求方式 在定义一个Rest接口时通常会利用GET.POST.PUT.DELETE来实现数据的增删改查:这几种方式有的需要传递参数,后台开发人员必须对接收到的参数进行参数验证来确保程序的健壮性 1.1 GET 一般用于查询数据,采用明文进行传输,一般用来获取一些无关用户信息的数据 1.2 POST 一般用于插入数据 1.3 PUT 一般用于数据更新 1.4 DELETE 一般用于数据删除 技巧01:一般都是进行逻辑删除(即:仅仅改变记录的状态,而并非真正的删除数据) 2 参数获取注解 2.1

自定义spring参数注解 - 打破@RequestBody单体限制

本文主要描述怎样自定义类似@RequestBody这样的参数注解来打破@RequestBody的单体限制. 目录1 @RequestBody的单体限制2 自定义spring的参数注解3 编写spring的参数注解解析器4 将自定义参数注解解析器设置到spring的参数解析器集合中5 指定参数解析器的优先级 一.@RequestBody的单体限制@RequestBody的作用:将请求体中的整体数据转化为对象. 1 @RequestMapping(value = "/body", meth

Java注解(3)-注解处理器(编译期|RetentionPolicy.SOURCE)

注解的处理除了可以在运行时通过反射机制处理外,还可以在编译期进行处理.在编译期处理注解时,会处理到不再产生新的源文件为止,之后再对所有源文件进行编译. Java5中提供了apt工具来进行编译期的注解处理.apt是命令行工具,与之配套的是一套描述"程序在编译时刻的静态结构"的API:Mirror API(com.sun.mirror.*).通过Mirror API可以获取到被注解的Java类型元素的信息,从而提供自定义的处理逻辑.具体的处理工具交给apt来处理.编写注解处理器的核心是两个

Java注解(1)-注解基础

注解(Annotation)是在JAVA5中开始引入的,它为在代码中添加信息提供了一种新的方式.注解在一定程度上把元数据与源代码文件结合在一起,正如许多成熟的框架(Spring)所做的那样.那么,注解到底可以做什么呢? 1.注解的作用. 提供用来完整地描述程序所需要的信息,如编译期校验程序信息. 生成描述符文件,或生成新类的定义. 减轻编写"样板"代码(配置文件)的负担,可以使用注解自动生成. 更加干净易读的代码. 编译期类型检查. 2.Java提供的注解 Java5内置了一些原生的注

深入理解Java注解之:注解的使用

注解是jdk1.5新增的特性.大家都知道,jdk1.5在java的发展史上有着划时代的意义.而注解的出现,在某种程度上颠覆了框架的设计.比如,spring在注解出现后,改善了原先五大组件的模式,增加了基于注解的实现方式.现在重点讲讲注解的使用. 元注解:       jdk1.5定义了4个元注解,元注解的作用是注解其他的注解. [email protected] [email protected] [email protected] [email protected] @Retention用于指

Java注解(2)-注解处理器(运行时|RetentionPolicy.RUNTIME)

如果没有用来读取注解的工具,那注解将基本没有任何作用,它也不会比注释更有用.读取注解的工具叫作注解处理器.Java提供了两种方式来处理注解:第一种是利用运行时反射机制:另一种是使用Java提供的API来处理编译期的注解. 反射机制方式的注解处理器 仅当定义的注解的@Retention为RUNTIME时,才能够通过运行时的反射机制来处理注解.下面结合例子来说明这种方式的处理方法. Java中的反射API(如java.lang.Class.java.lang.reflect.Field等)都实现了接