spring自定义注解实现(spring里面的注解) |
您所在的位置:网站首页 › spring扫描自定义注解 › spring自定义注解实现(spring里面的注解) |
大家好,又见面了,我是你们的朋友全栈君。 java注解:附在代码中的一些元信息,用于在编译、运行时起到说明、配置的功能。 一、元注解 java提供了4种元注解用于注解其他注解,所有的注解都是基于这四种注解来定义的。 @Target注解:用于描述注解的使用范围,超出范围时编译失败。 取值类型(ElementType): 1.CONSTRUCTOR:用于描述构造器 2.FIELD:用于描述域(成员变量) 3.LOCAL_VARIABLE:用于描述局部变量 4.METHOD:用于描述方法 5.PACKAGE:用于描述包 6.PARAMETER:用于描述参数 7.TYPE:用于描述类、接口(包括注解类型) 或enum声明 例如: 代码语言:javascript复制@Target(ElementType.TYPE) public @interface MyAnnotation { //类名注解,默认即为当前类名 String name() default "className"; }代码语言:javascript复制import java.lang.annotation.ElementType; import java.lang.annotation.Target; //字段注解 @Target(ElementType.FIELD) public @interface MyAnnotation1 { String name() default "fieldName"; String getFieldValue() default "getField"; String setFieldValue() default "setField"; }@Retention:描述注解的生命周期,即注解的生效范围。 取值范围(RetentionPolicy): 1.SOURCE:在源文件中生效,仅存在java文件中,class文件将会去除注解。 2.CLASS:在class文件中生效,仅保留在class文件中,运行时无法获取注解。 3.RUNTIME:在运行时生效,保留在class文件中且运行时可通过反射机制获取。 例如: 代码语言:javascript复制@Target(ElementType.FIELD) //字段注解 @Retention(RetentionPolicy.RUNTIME) //在运行期保留注解信息 public @interface MyAnnotation1 { String name() default "fieldName"; String getFieldValue() default "getField"; String setFieldValue() default "setField"; }@Documented:用于指定javac生成API时显示该注解信息。 例如: 代码语言:javascript复制@Target(ElementType.FIELD) //字段注解 @Retention(RetentionPolicy.RUNTIME) //在运行期保留注解信息 @Documented //在生成javac时显示该注解的信息 public @interface MyAnnotation1 { String name() default "fieldName"; String getFieldValue() default "getField"; String setFieldValue() default "setField"; }@Inherited:标明该注解可以由子类继承,及子类可以继承父类的注解。而默认情况下,子类是不继承父类注解的。 例如: 代码语言:javascript复制@Target(ElementType.FIELD) //字段注解 @Retention(RetentionPolicy.RUNTIME) //在运行期保留注解信息 @Documented //在生成javac时显示该注解的信息 @Inherited //标明MyAnnotation1注解可以被使用它的子类继承 public @interface MyAnnotation1 { String name() default "fieldName"; String getFieldValue() default "getField"; String setFieldValue() default "setField"; public enum FieldValue{MYTEST,MYFIELD,MYVALUE}; FieldValue realVale() default FieldValue.MYFIELD; }二、读取注解 通过反射机制我们可以读取注解信息。java在java.lang.reflect包下新增了AnnotatedElement接口,该接口定义了可以接受注解的元素为:Class(类)、Constructor(构造器)、Field(字段)、Method(方法)、Package(包)。 AnnotatedElement是所有注解元素的父接口,所有的注解元素都可以通过某个类反射获取AnnotatedElement对象,该对象有一下4个方法来访问Annotation信息。 (1) T getAnnotation(Class annotationClass) 返回该程序元素上存在的、指定类型的注解,如果该类型注解不存在,则返回null。 (2)Annotation[] getAnnotations():返回该程序元素上存在的所有注解。 (3)boolean isAnnotationPresent(Class |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |