Java—自定义注解及使用

Posted zqq_hello_world

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java—自定义注解及使用相关的知识,希望对你有一定的参考价值。

注解是放在Java源码的类、方法、字段、参数前的一种特殊“注释”,注解则可以被编译器打包进入class文件,因此,注解是一种用作标注的“元数据”。注解本身对代码逻辑没有任何影响,如何使用注解由注解解析工具决定(读注解、自定义逻辑)

元注解:用来修饰注解的注解

一、@Target() : 定义注解应用于哪些位置

 	类或接口:ElementType.TYPE;
	字段:ElementType.FIELD;
	方法:ElementType.METHOD;
	构造方法:ElementType.CONSTRUCTOR;
	方法参数:ElementType.PARAMETER。

二、@Retention:定义注解的生命周期,如果不定义则默认为RetentionPolicy.CLASS

 仅编译期:RetentionPolicy.SOURCE;
 仅class文件:RetentionPolicy.CLASS;
 运行期(自定义注解使用时常用):RetentionPolicy.RUNTIME。

三、@Inherited:当注解定义在类上时(Target = ElementType.TYPE),子类是否可以继承父类的注解(父类有注解,相当于子类也有了),不支持接口继承

四、@Documented:在生成javadoc的时候会把注解显示出来,不加不会显示

五:@Repeatable():定义注解是否可以在同一地方使用多次(jdk1.8新增)

/**
 * 用@interface定义注解
 * 用元注解来修饰注解
 * 没特殊需求正常只需要用@Target 和 @Retention来修饰自定义的注解
 */
@Target(ElementType.FIELD,ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(Fields.class)
@Inherited
@Documented
public @interface Field 
    String value() default ""; // 没有默认值 default 则必填


/**
 * @Repeatable 注解的使用, Fields注解的作用域必须大于或者等于 Field注解作用域
 */
@Target(ElementType.FIELD,ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@interface Fields 
    Field[] value();

自定义注解:通过元注解修饰自定义的注解,通过反射读取注解,实现想要的功能。

注解:

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Field 
    String value() default "";

读取注解:

public class User 

    @Field(value = "zqq")
    private String name;

    @Field(value = "18")
    private Integer age;

    private String sex;

    public static void main(String[] args) 
        User user = new User();
        Class c = user.getClass();
        Arrays.stream(c.getDeclaredFields()).forEach(f ->
            //f.isAnnotationPresent(Field.class)判断是否有注解,f.getAnnotation(Field.class).value()获取注解的值
            if(f.isAnnotationPresent(Field.class)) System.out.println("字段:" + f.getName() + "有注解。注解值为:" + f.getAnnotation(Field.class).value());
        );
    

以上是关于Java—自定义注解及使用的主要内容,如果未能解决你的问题,请参考以下文章

深入理解java注解及应用

深入理解java注解及应用

深入理解java注解及应用

java 自定义事件的触发及监听

java 注解分析及自定义注解

Java的自定义注解及通过反射获取注解