19.Java 注解

19.Java注解

1.Java内置注解----注解代码

@Deprecated                                    //不推荐使用的过时方法

@Deprecated
public void badMethod(){
    System.out.println("I am a old function");
}

@Override                                        //必须是覆盖父类(接口)的函数

@Override
public String toString(){
      return "override toString()";
}

@SuppressWarnings                          //关闭不恰当的编译期间警告

2.自定义注解

a.没有任何元素的注解---标记注解

b.普通注解定义、普通注解的使用

/**
 * 是否是类
 */
public @interface IsClass {
    String value();
    boolean isClass() default true;
}

解释:该注解有两个元素value和isClass,isClass元素的目的是标记对象是否为类,该元素默认为真。

当注解的元素都有默认值的时候,名为value的元素赋值时不用写名称

3.元注解

  • @Target---------------用于描述注解的使用范围
      • eg:TYPE:用于描述类、接口(包括注解类型) 或enum声明
  • @Retention-----------用于描述注解的生命周期
      • SOURCE:在源文件中有效(即源文件保留)---编译时起作用
      • RUNTIME:在运行时有效(即运行时保留)----运行时起作用
      • CLASS:在class文件中有效(即class保留)[默认]
  • @Documented————被修饰的注解会被写到javadoc中(标记注解)
  • @Inherited------允许子类继承父类中的注解[注解自身时不可继承的]可以使用getAnnotations()反射获取父类被
  • @Target(ElementType.TYPE)
    @Documented
    @Inherited
    @Retention(RetentionPolicy.RUNTIME)
    public @interface IsClass {
        String value();
        boolean isClass() default true;
    }

说明:元注解是用来修饰注解的注解,限定了注解的注释范围,注解的生命周期【源码级,运行时级别,Class文件级】,是否可以继承,是否创建文档等

4.运行时注解

像Spring一类的注解都与运行时注解有很大的关系,下面是一个利用注解,获取二维表的表名称,表的行名称,表的列值三个属性

4.1定义运行时注解

  • Table是二维表的表格名称
  • Column是二维表的列
  • Key是二维表的行
import java.lang.annotation.*;

/**
 * Created by yangyun on 2016/12/27.
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Column {
    String value();
}

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface Key{
    String value();
}

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@interface Table {
    String value();//表格的名称
}

4.2使用注解并编写相关的注解信息获取类

  • Tables类中包含了我们所需要的信息,Table注解注解在Table类上,Key和Column注解在Field上
  • GetInformation类是获取相关的注解信息的操作类,利用的是Java的反射机制
import java.util.List;

/**
 * Created by yangyun on 2016/12/27.
 */
@Empty(field = "Not Empty")
@IsClass("value属性的值")
public class Annotation {
    public static void main(String[] args) {
        System.out.format("tableName:%s\n",GetInformation.getName(Tables.class));
        try {
            System.out.format("key:%s\n",GetInformation.getKey(Tables.class));
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }
        System.out.format("columns:%s\n",GetInformation.getCols(Tables.class));
    }
}

@Table("students")
class GetInformation{
    public static String getName(Class<Tables> tablesClass){
        String strTableName=null;
        if(tablesClass.isAnnotationPresent(Table.class)){
            Table tableName=tablesClass.getAnnotation(Table.class);//表格名称
            strTableName=tableName.value();
        }
        return strTableName;
    }

    public static String getKey(Class<Tables> tablesClass) throws NoSuchFieldException {
        Field field=tablesClass.getDeclaredField("key");//获取private属性
        String strKey=null;
        if(field!=null){
            Key key=field.getAnnotation(Key.class);
            if(key!=null){
                strKey=key.value();
            }
        }
        return strKey;
    }

    public static List<String> getCols(Class<Tables> tablesClass){
        List<String> columns=new ArrayList<String>();
        Field[] fields=tablesClass.getDeclaredFields();
        if(fields!=null) {
            for (Field field : fields) {
                if (field.isAnnotationPresent(Column.class)) {
                    columns.add(field.getAnnotation(Column.class).value());
                }
            }
        }
        return columns;
    }
}

@Table("Students")
class Tables{
    @Key("Id")
    private String key;

    @Column("name")
    private String col1;

    @Column("sex")
    private String col2;
}

4.3 主要的API介绍(不细说属于反射的知识)

  • 1.myClass.getAnnotations()---获取该类所有的注解
  • 2.myClass.getAnnotation(Class annotationType)—获取特定注解类型
  • 3.myClass.isAnnotationPresent(Class annotationType)—判断是否存在特定类型的注解
  • 4.myClass.getDeclareAnnotations()— 获取该类的所有注解不包括从父类中继承的注解
时间: 2024-08-27 03:51:44

19.Java 注解的相关文章

java注解例子

java注解在web框架中使用比较广泛,这使得对象之间的关系配置起来更加容易 目前web框架中最常用的两种配置对象依赖关系的方式就是注解和xml配置文件的方法,api配置相对来说用的少一些, 下面实现一个Table注解来实现数据库表和实体bean之间的对应关系,实现一个Column注解来实现数据库表中每个字段和实体bean每个属性之间的 对应关系.java中的orm基本上就是根据这种思想来实现的. Table注解代码: package com.panther.dong.annotation.an

Java注解入门

注解的分类 按运行机制分: 源码注解:只在源码中存在,编译后不存在 编译时注解:源码和编译后的class文件都存在(如@Override,@Deprecated,@SuppressWarnings) 运行时注解:能在程序运行时起作用(如spring的依赖注入) 按来源分: 来自JDK的注解 第三方的注解 自定义的注解 自定义注解   如下实例给出了自定义注解的基本方法 1 package com.flypie.annotations; 2 3 import java.lang.annotatio

深入理解Java注解类型(@Annotation)

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 深入理解Java注解类型(@Annotation) - zejian的博客 - 博客频道 - CSDN.NET zejian的博客 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [5月书讯]流畅的Python,终于等到你!    &am

Java注解(一):初识Java注解

参考:http://www.cnblogs.com/skywang12345/p/3344137.html http://www.cnblogs.com/taoxiaoji/archive/2011/01/19/1939651.html    http://blog.csdn.net/tigerdsh/article/details/8848890 http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html 首先知道注解是什么,能干什

基于java注解实现自己的orm框架

ORM即Object Relation Mapping,Object就是对象,Relation就是关系数据库,Mapping映射,就是说Java中的对象和关系数据库中的表存在一种对应关系. 现在常见的ORM框架比如Hibernate和mybatis,都是采用了ORM的方式,基本原则就是类-表(Table).属性-列(Column)这样的对应,所以一个对象就能表示数据表中的一行数据啦. 本文转自http://m.blog.csdn.net/woshisangsang/article/details

JAVA注解Annotation

JAVA注解Annotation JAVA注解Annotation 什么是注解 为什么要引入注解 JDK内建Annotation JDK元Annotation Annotation示例 自定义注解 提取Annotation信息 Annotation处理器编写 Annotation处理器处理异常 什么是注解? ??用一个词就可以描述注解,那就是元数据,即一种描述数据的数据.所以,可以说注解就是源代码的元数据.比如,下面这段代码: @Override publicString toString()

java注解研究

注解作用 常见的作用有以下几种: 生成文档.这是最常见的,也是java 最早提供的注解.常用的有@see @param @return @author等. 跟踪代码依赖性,实现替代配置文件功能.比较常见的是spring 2.5 开始的基于注解配置.作用就是减少配置.现在的框架基本都使用了这种配置来减少配置文件的数量.也是 在编译时进行格式检查.如@override 放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出. 包 java.lang.annotation 中包含所有定义自

Java 注解(Annotation)概念及实战

摘要: java注解:java 提供了一种源程序中的 元素 关联任何信息和任何元数据的途径和方法. 学习注解的目的: 能够读懂别人写的代码,特别是框架相关的代码 让编程更加简洁,代码更加清晰 让别人高看一眼,特别是会使用自定义注解 目录: java中的常见注解 注解分类 自定义注解 注解应用实践 1. java中的常见注解 1) JDK 自带的注解 @Override @Deprecated @SuppressWarnings2) 常见的第三方注解 Spring @Autowired @Serv

Java 注解-2

java 注解,从名字上看是注释,解释.但功能却不仅仅是注释那么简单.注解(Annotation) 为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后 某个时刻方便地使用这些数据(通过 解析注解 来使用这些数据),常见的作用有以下几种: 生成文档.这是最常见的,也是java 最早提供的注解.常用的有@see @param @return 等 跟踪代码依赖性,实现替代配置文件功能.比较常见的是spring 2.5 开始的基于注解配置.作用就是减少配置.现在的框架基本都使用了这种配置来减