【自定义框架系列】【java.lang.annotation】自定义注解

 

搭建自己的框架,N步曲

引言

自己的杂文,写的不是很好,见谅。
本章讲解主题内容与自定义框架内容,从注解到xml定义,到常用功能。字符处理,数据内容处理,前台后台数据对接,json,文件上传下载,即时通信,等等,我能想到的东西,创建自己的框架。其中肯定有很多不完善,和现有的框架差距相当大的地方,所以请理解,这类文章只是为了提升java编程而设定,并不是为了与市面上成熟的框架做比拼。
文中很多东西都是现学的,不能说【我能】

正文

说注解,在java编程中,注解是非常常见的,无论是常见的@Override还是常说的各种框架提供的注解。或多或少的需要用到。今天我就去实现以下注解的过程。
java中的注解,定义一切注解的注解称之为【元注解】,可以理解为Object对象。
java中提供的元注解分别为
首先来说说两个重要元注解

@Target:目标注解。该注解表明该定义注解的使用范围

使用范围定义

  • ElementType.TYPE:接口、类、枚举、注解

  • ElementType.FIELD: 字段、Enum枚举常量

  • ElementType.METHOD :方法

  • ElementType.PARAMETER :方法参数【在mybatis中提供的`@param】

  • ElementType.COSTRUCTOR:构造方法【少见】

  • ElementType.LOCAL_VARIABLE局部变量【没用过暂时】

  • ElementType.ANNOTATION_TYPE注解【你没有看错,注解也是可以注解注解的。。】

  • ElementType.PACKAGE包 【这个貌似看到的很少哎】
    使用方法  @Target(ElementType.METHOD)

@Retention:保留政策。该注解定义java编译时的保留方式

保留方式种类

  • RetentionPolicy.SOURCE :仅存于源码中,编译[.class]时舍弃

  • RetentionPolicy.CLASS :编译于.class中,但是无法运行时使用

  • RetentionPolicy.RUNTIME : 编译于【.class】文件中,并且可以通过反射获取
    使用方法 @Retention(RetentionPolicy.RUNTIME)

    @Override 就属于源码注解,在编译class时就舍弃掉了。

其余两种,一种的定义为【javadoc】使用的@Documented,另一种就是定义可以被继承的 @Inherited 注解

现在开始定义一个注解

/**
 * 在java注解中 定义与书写class类似,使用【@interface】 表示定义当前对象为注解
 * 对象在注解对象中,只需要声明注解对象内容,不需要注解具体实现
 * 下方示例:定义注解用于方法,并且在运行时可以被获取到
 */
@Target(ElementType.METHOD)//该注解将用于方法
@Retention(RetentionPolicy.RUNTIME)//在运行时起作用
@Inherited//可以被继承
public @interface Role{
        /*
         * 定义注解的一个元素【或者称之为方法】,该元素用来接受注解的值
         *  String role()  default "defValue";  指派当前的元素的默认值
         */
    String role();

}

使用方法

public class AnnotationTest{
    @Role(role="myRole")//这里是使用刚刚定义的注解
    public void testMethod(){
        //TODO 这里是方法体
    }
}

以上就是注解的定义全过程,附录注解图一张


评论 (1)

  • Offibibra Reply

    Jul 27 2021 06:47 pm

发表评论