一、自定义注解

1. 使用关键字 @interface
2. 默认情况下,注解可以修饰 类、方法、接口等。
3. 如下为一个基本的注解例子:
  1. //注解中的成员变量非常像定义接口
  2. public @interface MyAnnotation {
  3. //不带有默认值
  4. String name();
  5. //带有默认值
  6. int age() default 20;
  7. }
4. Reflect中3个常见方法解读
  • getAnnotion(Class<T> annotationClass) 返回该元素上存在的,指定类型的注解,如果没有返回null
  • Annotation[] getAnnotations() 返回该元素上所有的注解。
  • boolean isAnnotationPersent(Class<? extends Annotation> annotationClass) 判断该院上上是否含有制定类型的注释。

二、元注解

  1. @Target(ElementType.METHOD)
  2. @Retention(RetentionPolicy.RUNTIME)
  3. public @interface ValueBind {
  4. filedType type();
  5. String value() default "SUSU";
  6. enum filedType {
  7. STRING, INT
  8. }
  9. }
其中@Target 和 @Retention为元注解。
  • @Retention有如下几种取值:
  • 其中通常都是RetentionPolicy.RUNTIME

 @Target有如下几个取值:

@Inherited 表示该注解具有继承性。

三、Demo


1. ValueBind注解
  1. @Target(ElementType.METHOD)
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Documented
  4. public @interface ValueBind {
  5. filedType type();
  6. String value() default "SUSU";
  7. enum filedType {
  8. STRING, INT
  9. }
  10. }


2. Person类
  1. public class Person implements Serializable {
  2. private String name;
  3. private int age;
  4. public String getName() {
  5. return name;
  6. }
  7. @ValueBind(type = ValueBind.filedType.STRING, value = "LCF")
  8. public void setName(String name) {
  9. this.name = name;
  10. }
  11. public int getAge() {
  12. return age;
  13. }
  14. @ValueBind(type = ValueBind.filedType.INT, value = "21")
  15. public void setAge(int age) {
  16. this.age = age;
  17. }
  18. @Override
  19. public String toString() {
  20. return "Person{" +
  21. "name='" + name + '\'' +
  22. ", age=" + age +
  23. '}';
  24. }
  25. }

3. Main方法
  1. import java.lang.reflect.Method;
  2. public class Main {
  3. public static void main(String[] args) throws Exception {
  4. Object person = Class.forName("Person").newInstance();
  5. //以下获取的是:类的注解
  6. // Annotation[] annotations = person.getClass().getAnnotations();
  7. Method[] methods = person.getClass().getMethods();
  8. for (Method method : methods) {
  9. //如果该方法上面具有ValueBind这个注解
  10. if (method.isAnnotationPresent(ValueBind.class)) {
  11. //通过这个注解可以获取到注解中定义的
  12. ValueBind annotation = method.getAnnotation(ValueBind.class);
  13. if (annotation.type().equals(ValueBind.filedType.STRING)) {
  14. method.invoke(person, annotation.value());
  15. } else {
  16. method.invoke(person, Integer.parseInt(annotation.value()));
  17. }
  18. }
  19. }
  20. System.out.println(person);
  21. }
  22. }
输出结果:
Person{name='LCF', age=21}






Java注解Annotation学习笔记的更多相关文章

  1. Java注解Annotation学习

    学习注解Annotation的原理,这篇讲的不错:http://blog.csdn.net/lylwo317/article/details/52163304 先自定义一个运行时注解 @Target( ...

  2. Java 注解(Annoation)学习笔记

    1 Junit中的@Test为例: 1.1 用注解(@Test)前 private boolean isTestMethod(Method m) { return m.getParameterType ...

  3. 深入学习JAVA注解-Annotation(学习过程)

    JAVA注解-Annotation学习 本文目的:项目开发过程中遇到自定义注解,想要弄清楚其原理,但是自己的基础知识不足以支撑自己去探索此问题,所以先记录问题,然后补充基础知识,然后解决其问题.记录此 ...

  4. 深入JAVA注解-Annotation(学习过程)

    JAVA注解-Annotation学习 本文目的:项目开发过程中遇到自定义注解,想要弄清楚其原理,但是自己的基础知识不足以支撑自己去探索此问题,所以先记录问题,然后补充基础知识,然后解决其问题.记录此 ...

  5. java之jvm学习笔记四(安全管理器)

    java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...

  6. java之jvm学习笔记十三(jvm基本结构)

    java之jvm学习笔记十三(jvm基本结构) 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完全有信心,让概念在你的脑子里变成 ...

  7. 《深入理解Java虚拟机》学习笔记

    <深入理解Java虚拟机>学习笔记 一.走近Java JDK(Java Development Kit):包含Java程序设计语言,Java虚拟机,JavaAPI,是用于支持 Java 程 ...

  8. Java注解和反射笔记

    Java注解和反射笔记 1 注解 1.1 定义 Annotation是从JDK1.5开始引入的技术 作用 不是程序本身,可以对程序作出解释 可以被其他程序(编译器等)读取 格式 @注释名,可以添加一些 ...

  9. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

随机推荐

  1. Python解码base64遇到Incorrect padding错误

    Python解码base64遇到Incorrect padding错误 base64转码过程 先说一下转换过程,详细的可以参考阮一峰.廖雪峰博客: 所谓Base64,就是说选出64个字符----小写字 ...

  2. Maven mvn install 本地jar添加到maven仓库中

    最近在使用支付宝.财付通这样的第三方支付,在使用支付宝过程中需要引入官方SDK方便开发,使用以下命令来将本地的jar装载到maven仓库中. 这里有几点需要注意点,我使用Windows10时,使用po ...

  3. 【爬虫】通用抽取网页URL

    package model; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; i ...

  4. Win7窗口最大化和最小化快捷键

    原文: https://blog.csdn.net/u012269267/article/details/52484399 Windows 键 + 方向键“↑” 使当前使用的窗口最大化. Window ...

  5. WideCharToMultiByte和MultiByteToWideChar函数的用法(转)

    转自:http://www.cnblogs.com/gakusei/articles/1585211.html 为了支持Unicode编码,需要多字节与宽字节之间的相互转换.这两个系统函数在使用时需要 ...

  6. MyBatisBatchItemWriter Cannot change the ExecutorType when there is an existing transaction

    但凡使用mybatis,同时与spring集成使用时,接下来要说的这个问题是躲不了的.众所周知,mybatis的SqlSessionFactory在获取一个SqlSession时使用默认Executo ...

  7. php阿里云oss文件上传

    php的文件上传 文件上传 php的文件上传放在了$_FILES数组里,单文件和多文件上传的区别在于$_FILES['userfile']['name']是否为数组, 不熟悉的可以读一下官方文档 单文 ...

  8. 前端常用功能记录(二)—datatables表格(转)

    前端常用功能记录(二)—datatables表格 并不是所有的后台开发都有美工和前端工程师来配合做页面,为了显示数据并有一定的美感,jQuery的DataTables插件对于像我这样的前端菜鸟来说真是 ...

  9. Java中的守护线程——daemon

    絮叨 Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 定义:守护线程(aka:服务线程),在没有用户线程可服务时会自动离开. 优先级:守护线程的优先级 ...

  10. Iconfont在移动端应用的问题

    关于部分奇葩用户代理不显示字体图标 以酷派为代表的部分安卓手机自带浏览器.微信/QQ WebView 等用户代理无法正常显示 Icon Font,原因可能是这些用户代理无法正确处理伪元素 conten ...