首页 > 编程语言 >Java自定义注解

Java自定义注解

时间:2022-09-05 00:34:22浏览次数:54  
标签:Java String 自定义 return User 注解 public

  1. 简介
    注解是一种能被添加到java源代码中的元数据,方法、类、参数和包都可以用注解来修饰。注解可以看作是一种特殊的标记,可以用在方法、类、参数和包上,程序在编译或者运行时可以检测到这些标记而进行一些特殊的处理。
  2. 元注解的介绍
    元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解
    @Target
    @Retention
    @Documented
    @Inherited
    1. @Target注解,是专门用来限定某个自定义注解能够被应用在哪些Java元素上面的。它使用一个枚举类型定义如下
      public enum ElementType {
          /** 类、接口(包括注解类型)或枚举声明 */
          TYPE,
      
          /** 字段声明(包括枚举常量) */
          FIELD,
      
          /** 方法声明 */
          METHOD,
      
          /** 形式参数声明 */
          PARAMETER,
      
          /** 构造函数声明 */
          CONSTRUCTOR,
      
          /** 局部变量声明 */
          LOCAL_VARIABLE,
      
          /** 注解类型声明 */
          ANNOTATION_TYPE,
      
          /** 包装声明 */
          PACKAGE,
      
          /**
           * 类型参数声明
           *
           * 自从:1.8
           */
          TYPE_PARAMETER,
      
          /**
           * 使用类型
           *
           * 自从:1.8
           */
          TYPE_USE
      }
    2. @Retention表明该注解的生命周期
      生命周期类型 描述
      RetentionPolicy.SOURCE 编译时被丢弃,不包含在类文件中
      RetentionPolicy.CLASS JVM加载时被丢弃,包含在类文件中,默认值
      RetentionPolicy.RUNTIME 由JVM 加载,包含在类文件中,在运行时可以被获取到
    3. @Document表明该注解标记的元素可以被Javadoc 或类似的工具文档化。
    4. @Inherited表明使用了@Inherited注解的注解,所标记的类的子类也会拥有这个注解。
  3. 自定义注解

    修饰符: 访问修饰符必须为public,不写默认为pubic;
    关键字: 关键字为@interface;
    注解名称: 注解名称为自定义注解的名称,使用时还会用到;
    注解内容: 注解中内容,对注解的描述。

    1. 自定义注解 
      @Documented
      @Inherited
      @Target({ ElementType.FIELD, ElementType.METHOD ,ElementType.TYPE}) //可以在字段、枚举的常量、方法
      @Retention(RetentionPolicy.RUNTIME)
      public @interface Init {
      String value() default "";
      }
    2.  

      数据模型使用注解

      public class User {
      private String name;
      private String age;
      
      public String getName() {
      return name;
      }
      
      @Init("louis")
      public User setName(String name) {
      this.name = name;
      return this;
      }
      
      public String getAge() {
      return age;
      }
      
      @Init("22")
      public User setAge(String age) {
      this.age = age;
      return this;
      }
      } 

    3. 定义一个“注解解析器”

      public class userFactory {
      
      public static User create() {
      User user = new User();
      
      
      // 获取User类中所有的方法(getDeclaredMethods也行)
      Method[] methods = User.class.getMethods();
      
      
      try
      {
      for (Method method : methods)
      {
      // 如果一个注解指定注解类型是存在于此元素上此方法返回true,否则返回false
      //参数 -- 对应于注解类型的Class对象
      if (method.isAnnotationPresent(Init.class))
      {
      //此方法返回该元素的注解在此元素的指定注释类型(如果存在),否则返回null
      Init init = method.getAnnotation(Init.class);
      // 如果Method代表了一个方法 那么调用它的invoke就相当于执行了它代表的这个方法,在这里就是给set方法赋值
      method.invoke(user, init.value());
      }
      }
      }
      catch (Exception e)
      {
      e.printStackTrace();
      return null;
      }
      
      
      return user;
      }
      }

    4. 测试运行

标签:Java,String,自定义,return,User,注解,public
From: https://www.cnblogs.com/gpingguo/p/16656646.html

相关文章

  • JAVA 面向对象-上 (一)
    JAVA面向对象-上(一)类与对象1.面向对象学习的三条主线:①Java类及类的成员:属性、方法、构造器;代码块、内部类②面向对象的三大特征:封装性、继承性、多态性、(抽象性)......
  • Java基础(三)—— 修饰符
    Java修饰符主要分为两种,访问权限修饰符和非访问权限修饰符。分别作用于类、方法和域(字段)上面,而且他们将起到不同的作用,甚至有些修饰符还是互斥的。接下来我将粗略的介绍......
  • HTML、CSS 和 JavaScript 格式的 3D 玻璃天气图标
    HTML、CSS和JavaScript格式的3D玻璃天气图标3D玻璃天气图标免费下载****在HTML、CSS和JavaScript中HTML:<divclass="weatherweather--sun"><divclass......
  • 【Java可复用工具类-评论时间】传入LocalDateTime参数,返回一个时间【过去、昨天、今天
    1、效果2、代码importorg.springframework.stereotype.Component;importjava.time.Duration;importjava.time.LocalDate;importjava.time.LocalDateTime;impor......
  • Day38注解和反射
    注解Annotation的作用:不是程序本身,可以对程序作出解释(这一点和注释(comment)没什么区别)。可以被其他程序(如:编译器等)读取。Annotation的格式:注解是以"@注释名"在代......
  • Java基础01-注释
    注释:对代码的一种解释1.单行注释//*仅表示//当前行且//后面的内容为注释2.多行注释/*/*换行自动补充,可以注释多行3.文档注释/***///我是单行注释/......
  • Java制作验证码
    Java制作验证码一、创建一个maven的web项目在pom.xml文件中导入maven和tomcat的坐标<build><plugins><plugin><groupId>org.apache......
  • JavaScript 逻辑且(&&)和逻辑或(||)的妙用
    简单运用逻辑且(&&):左右必须都满足true才返回true;逻辑或(||):左右其中一个满足true就返回true。这样简单的运用是整体返回一个布尔值,适合在语句判断的时候用:letus......
  • Java并发编程之synchronized 与 volatile
    synchronized同步代码块一般使用Java的synchronized关键字来实现,有两种方式对方法进行加锁操作;第一处,在方法签名处加synchronized关键字;第二,使用synchronized(对象......
  • Java入门1-安装开发环境
    JDK8的安装1.浏览器搜索JDK8,找到下载地址2.下载电脑对应的版本3.双击安装JDK4.记住安装的路径5.配置环境变量​(1)我的电脑-->右键-->属性-->高级系统设置-->环境......