注解的初步常见以及注意事项

1.注解的官网定义:

  1. 注解是一种元数据形式,即注解是属于Java的一种数据类型,和类、接口、数组、枚举类似。
  2. 注解用来修饰类、方法、变量、参数、包
  3. 注解不会对锁修饰的代码产生直接的影响

2.创建注解步骤:

第一步:定义注解--相当于定义标记;
第二步:配置注解--把标记打在需要用到的程序代码中;
第三步:解析注解--在编译期或者运行时检测到标记,并进行特殊操作。

3.具体操作:

/* 操作规范:
 * 	key: 
 * 		1.用户没有赋值
 * 			如果key为"",表示用户使用自动生成的key
 * 			key:包名.类名.方法名.拼接第一个参数
 * 		2.如果用户赋值
 * 			key:使用用户的数据
 *  seconds:
 *  	如果时间不为0,表示用户需要设定超时时间
 */
@Target({ElementType.METHOD}) //对方法生效
@Retention(RetentionPolicy.RUNTIME)
public @interface Cache_Find {
	String key() default "";
	int  seconds() default 0;
}

注意点:

  1. 访问修饰符必须为public;
  2. 该元素的类型只能是基本数据类型,String,Class,枚举类型,注解类型以及一维数组;
  3. 上面代码中的key()并不是定义方法参数的地方,也不能再()中定义任何参数,它只是一种语法。
  4. default是该方法的默认值,必须要和方法前边定义的类型一致。
  5. 如果没有给默认值的话,在后期使用注解的使用,一定需要给该元素赋值。否则就会报错。

4.常用的元注解:

4.1@Target:

//@Target({ElementType.METHOD})  上面的代码代表对方法生效
public enum ElementType {
    /** Class, interface (including annotation type), or enum declaration */
    /*类,接口(包括注解类型)或枚举的声明*/
    TYPE,

    /** Field declaration (includes enum constants) */
    /*属性声明*/
    FIELD,

    /** Method declaration */
    /*方法形式参数说明*/
    METHOD,

    /** Formal parameter declaration */
    /*方法形式参数声明*/
    PARAMETER,

    /** Constructor declaration */
    /*构造方法的声明*/
    CONSTRUCTOR,

    /** Local variable declaration */
    /*局部变量声明*/
    LOCAL_VARIABLE,

    /** Annotation type declaration */
    /*注解类型声明*/
    ANNOTATION_TYPE,

    /** Package declaration */
    /*包的声明*/
    PACKAGE,

    /**
     * Type parameter declaration
     *	类型参数声明
     * @since 1.8
     */
    TYPE_PARAMETER,

    /**
     * Use of a type
     *类型的使用
     * @since 1.8
     */
    TYPE_USE
}

4.2@Retention:

@Retention注解,划分为持久力、保持力。即用来修饰自定义注解的生命力。

注解的声明周期有三个阶段:1、Java源文件阶段;2、编译到Class文件阶段;3、运行期阶段。同样使用了 RetentionPolicy 枚举类型定义了三个阶段:

public enum RetentionPolicy {
    /**
     * Annotations are to be discarded by the compiler.
     * 注解将被编译器忽略掉
     */
    SOURCE,

    /**
     * Annotations are to be recorded in the class file by the compiler
     * but need not be retained by the VM at run time.  This is the default
     * behavior.
     * 注解将被编译器记录在Class文件中,但是在运行的时候,不会被虚拟机保留,这是一个默认的行为
     */
    CLASS,

    /**
     * Annotations are to be recorded in the class file by the compiler and
     * retained by the VM at run time, so they may be read reflectively.
     * 注解将被编译器记录在class文件中,而且在运行时会被虚拟机保留,因此他们可以通过反射读取到
     * @see java.lang.reflect.AnnotatedElement
     */
    RUNTIME
}

4.3@Documented:

@Documented注解,是被用来指定自定义注解是否能随着被定义的java文件生成到JavaDoc文档当中。

4.4@Inherited:

@Inherited注解,是指定某个自定义注解如果写了父类的声明部分,那么子类的声明部分也能自动拥有该注解。@Inherited注解只对那些@Target被定义为ElementType.TYPE的自定义注解起作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值