自定义注解

0,总的来说,注解分为注解编写,注解用上,注解解析器,比如在spring中,注解编写和注解解析器已经写好,我们只需要用注解就好

有个数据库的例子:https://blog.csdn.net/javazejian/article/details/71860633

编写数据库表,字段,字段约束的注解,添加在实体类中,再写一个解析器去解析,相当于hibernate的意思,要像spring那样,加上扫描包,获得包上的类,检查类有没有相关的注解

1,注解是java提供了一种程序元素关联任何信息和任何元数据的途径和方法

2,注解是一个接口,程序可以通过反射来获得指定程序元素的Annotion(注解)对象,然后通过Annotion对象来获得注解里面的元数据

3,Annotation类型定义了Annotation的名字、类型、成员默认值。一个Annotation类型可以说是一个特殊的java接口,当我们通过java反射api访问Annotation时,返回值将是一个实现了该 annotation类型接口的对象

4,1.JDK内置系统注解

     @Override,

     @Deprecated
    2.元注解  负责注解其他注解

    1.@Target,作用在哪里,方法,类,域,构造器
    2.@Retention,什么级别保存,source,class,runtime
    3.@Documented,将注释包含在javaDoc中
    4.@Inherited,允许子类继承父类的注释
  3.自定义注解

    1.所有基本数据类型(int,float,boolean,byte,double,char,long,short)
    2.String类型
    3.Class类型
    4.enum类型
    5.Annotation类型
    6.以上所有类型的数组

  第一,只能用public或默认(default)这两个访问权修饰.例如,String value();这里把方法设为defaul默认类型;   
  第二,参数成员只能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和 String,Enum,Class,annotations等数据类型,以及这一些类型的数组.例如,String value();这里的参数成员就为String;  
  第三,如果只有一个参数成员,最好把参数名称设为"value",后加小括号.例:下面的例子FruitName注解就只有一个参数成员。

5,Java在java.lang.reflect 包下新增了AnnotatedElement接口,该接口代表程序中可以接受注解的程序元素,该接口主要有如下几个实现类:

Class:类定义
  Constructor:构造器定义
  Field:累的成员变量定义
  Method:类的方法定义
  Package:类的包定义

访问注解元素的几种方法:

  方法1:<T extends Annotation> T getAnnotation(Class<T> annotationClass): 返回改程序元素上存在的、指定类型的注解,如果该类型注解不存在,则返回null。
  方法2:Annotation[] getAnnotations():返回该程序元素上存在的所有注解。
  方法3:boolean is AnnotationPresent(Class<?extends Annotation> annotationClass):判断该程序元素上是否包含指定类型的注解,存在则返回true,否则返回false.
  方法4:Annotation[] getDeclaredAnnotations():返回直接存在于此元素上的所有注释。与此接口中的其他方法不同,该方法将忽略继承的注释。(如果没有注释直接存在于此元素上,则返回长度为零的一个数组。)该方法的调用者可以随意修改返回的数组;这不会对其他调用者返回的数组产生任何影响。

例题和参考:http://www.cnblogs.com/peida/archive/2013/04/26/3038503.html#!comments

posted on 2018-08-05 00:30  Kooing  阅读(123)  评论(0编辑  收藏  举报

导航