spring自定义注解实现(spring里面的注解)

您所在的位置:网站首页 spring扫描自定义注解 spring自定义注解实现(spring里面的注解)

spring自定义注解实现(spring里面的注解)

2024-05-21 12:14| 来源: 网络整理| 查看: 265

大家好,又见面了,我是你们的朋友全栈君。

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