一直都想了解一下注解,下面是自己学到的一点东西。

1.分类

  1. 内置注解(@Override,@Deprecated,@SuppressWarnings),源码上很清楚的备注了各自的作用。
  2. 元注解(@Retention,@Target...),还是看源码备注。
  3. 自定义注解 。

2.应用

1.注解(annotation)作为注释用(comment),很明显这不是主要作用。

2.被其他程序调用(如编译器)。

3.实例

package com.test.annotation;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Table {String value();
}package com.test.annotation;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Column {String colName();String type();int length();// 不传值取默认值boolean isNull() default true;
}package com.test.annotation;@Table("student")
public class Student {@Column(colName = "id", type = "bigint", length = 20, isNull = true)private Long id;@Column(colName = "name", type = "varchar", length = 20, isNull = false)private String name;@Column(colName = "age", type = "int", length = 3)private int age;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}import com.test.annotation.Column;
import com.test.annotation.Table;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;public class Main {public static void main(String[] args) {try {String sql;Class clazz = Class.forName("com.test.annotation.Student");// 读取类的注解for (Annotation annotation : clazz.getAnnotations()) {System.out.println(annotation);}// 获取类的指定注解Table table = (Table) clazz.getAnnotation(Table.class);//System.out.println(table.value());sql = "create table " + table.value() + " ( " +"\n";// 获取类的属性的注解Field id = clazz.getDeclaredField("id");Column idAnnotation = id.getAnnotation(Column.class);System.out.println(idAnnotation.colName());for (Field field : clazz.getDeclaredFields()) {Column col = field.getAnnotation(Column.class);sql = sql + "   " + col.colName() + " " + col.type() + "(" + col.length() +") " + (col.isNull() ? "default null" : "not null") +",\n";}sql.lastIndexOf(',');sql = sql.substring(0, sql.length() - 2) + "\n);";System.out.println(sql);} catch (Exception e) {}}
}/*运行结果:
@com.test.annotation.Table(value=student)
id
create table student (
id bigint(20) default null,
name varchar(20) not null,
age int(3) default null
);*/

通过反射读取Student类上的@Table和@Column注解生成SQL语句。

Java基础--注解相关推荐

  1. Java基础-注解和反射

    Java基础-注解和反射 前言 对于注解,我主要还是在自定义APT还有运行时反射获取类来让自己能够构建出复用性更高的代码逻辑. 知识点1-注解: 注解的应用场景由元注解@Retention来进行指定, ...

  2. Java基础 --- 注解 Annotation

    Java基础 --- 注解 Annotation Java注解 Java自带的标准注解 自定义注解 Java注解 Java注解它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadat ...

  3. 夯实 Java 基础 - 注解

    夯实 Java 基础 - 注解 不知道大家有没有一种感觉,当你想要了解某个知识点的时候,就会发现好多技术类 APP 或者公众号在推一些关于这个知识点的文章.也许这就是大数据的作用,这也说明总有人比你抢 ...

  4. Java基础-注解机制详解

    文章目录 1. 注解基础 1.1 Java内置注解 1.1.1 内置注解 - @Override 1.1.2 内置注解 - @Deprecated 1.1.3 内置注解 - @SuppressWarn ...

  5. Java基础——注解

    一.概述 引自百度百科: 定义:注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法. ...

  6. java基础-注解Annotation原理和用法

    转载自 http://www.wolfbe.com/detail/201608/265.html 在很多java代码中都可以看到诸如@Override.@Deprecated.@SuppressWar ...

  7. Java 基础 —— 注解

    注解(annotation)不是注释(comment): 注解,是一种元数据(metadata),可为我们在代码中添加信息提供了一种形式化的方法.注解在一定程度上实现了元数据和源代码文件的结合,而不是 ...

  8. java基础:注解的定义与使用

    java中的注解 1.该如何来理解注解? 乔布斯重新定义了手机,罗太君重新定义了傻逼.自然而然的就给罗太君贴上了傻逼的标签,不熟悉老罗的人,不知道他当教师,办博客,做手机,殊不知老罗还有"理 ...

  9. java基础- 注解和反射

    1. 注解(Annotation) 1. 什么是注解 Annotation是从JDK5.0开始引入的新技术. Annotation的作用 : 不是程序本身,可以对程序作出解释.(这一点和注释(comm ...

最新文章

  1. 关于 MongoDB 与 SQL Server 通过本身自带工具实现数据快速迁移 及 注意事项 的探究...
  2. iframe元素內嵌页面如何去掉继承的html及body背景色/背景图片
  3. js如何通过变量调用函数,函数名在变量里面
  4. Python-基础知识-字典dict和集合set
  5. ASPxGridView EditFormLayout修改 TextBox文本长度
  6. gorm preload 搜索_LeetCode刷题笔记|95:不同的二叉搜索树 II
  7. arm export 汇编_C/C++与汇编混合编程有什么好处?
  8. nginx rewrite解决 jenkins error 404心得笔记
  9. 数学建模常用算法—模糊综合评价法(FCE)
  10. 文献分享:定义的肿瘤抗原特异性T细胞增强了个性化的TCR-T细胞治疗和免疫治疗反应的预测
  11. 在谷歌下面打开之后显示金山毒霸页面
  12. nvidia卸载程序无法继续运行_win10系统下nvidia安装程序无法继续不兼容的解决办法_nvidia显卡驱动与系统不兼容...
  13. uva10105(数论多项式展开公式)
  14. 市值仅剩5亿美元,猎豹移动为何赢了财报却输了市值?
  15. Qt之时间轴样式汇总
  16. Visual C++中的AFX前缀
  17. 在Win7上安装TexLive及设置XeLaTeX的整个过程
  18. Intent的基本属性及用法
  19. 高龄白菜java学习第101天(java数据结构和算法(19))
  20. Git 安装和配置(一)

热门文章

  1. 模拟黑洞图像_第一张黑洞图片如何获得?8个望远镜和数百万次模拟
  2. AVR全局全能中断 #define sei() __asm__ __volatile__ (sei ::) 是什么意思
  3. 记录vue绑定class和style出现先后顺序问题
  4. android 播放直播流,【报Bug】video组件播放直播流无法重连 android app
  5. 为何零信任架构身份管理平台更可靠?
  6. 2021年美容师(初级)考试技巧及美容师(初级)复审考试
  7. 五十多岁农村户口的人,还能不能交社保呢?
  8. 李宏毅机器笔记-1-机器学习介绍
  9. CodeForces700E Cool Slogans
  10. WebRTC服务器搭建