Java Annotation 刷课笔记(一)
1.什么是注解?
1.1.Annotation是从JDK5.0引入的新技术
1.2.Annotation的作用:
- 不是程序本身,可以对程序作出解释(这一点,和注释没什么区别)
- 可以被其他程序(比如编译器)读取,注解信息处理流程,是注解和注解的重大区别,如果没有注解信息的处理流程,则注解毫无意义
1.3.内置注解
@Override 重载
@Deprecated 不建议使用
@SupressWarning 去除警告信息
2.自定义注解
2.1.自定义注解的前提是注解上要加入两个元注解
2.1.1.Target 注解目标是谁
package 包
type 类,接口,枚举,Annotation
constructor 构造器
field 描述域
method 描述方法
local_variable 局部变量
2.1.2 Retention 需要在什么级别保存注解信息,用于描述注释的声明周期(是CLASS,SOURCE还是RUNTIME)
source 在源文件中保留
class 在class文件中保留
runtime 在运行时可以被反射读取(这个用的比较多)
2.1.3 可以写类似方法的参数
String stu() default "";
3.利用反射机制读取注解信息
示例:使用反射写一个程序来创建tb_student表
studnet类
package littlepage.annotation.demo01;
@AnnoTable("tb_student")
public class Student {
@AnnoField(columnName = "id",type = "int",length = )
private int id;
@AnnoField(columnName = "name",type = "varchar",length = )
private String name;
@AnnoField(columnName = "field",type = "varchar",length = )
private int age;
}
AnnoTable Annotation
package littlepage.annotation.demo01; 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 AnnoTable {
String value();
}
AnnoField Annotation
package littlepage.annotation.demo01; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnoField {
String columnName();
String type();
int length();
}
转换类
package littlepage.annotation.demo01; import java.lang.annotation.Annotation;
import java.lang.reflect.Field; public class Demo01 {
public static void toSQL(Class<?> clazz) {
//拿到类名上的属性值
AnnoTable table = (AnnoTable) clazz.getAnnotation(AnnoTable.class);
String tableName = table.value();
//拼SQL
StringBuilder sb = new StringBuilder();
sb.append("create table ").append(tableName).append("(\n");
//拿到各个Field
Field[] fields = clazz.getDeclaredFields();
String fieldString;
for (Field field : fields) {
Annotation[] annotations=field.getAnnotations();
for (Annotation annotation:annotations) {
String annotationString=annotation.toString();
String columnName=annotationString.substring(annotationString.indexOf("columnName=")+,annotationString.indexOf(", type"));
String typeName=annotationString.substring(annotationString.indexOf("type=")+,annotationString.indexOf(", length"));
String length=annotationString.substring(annotationString.indexOf("length=")+,annotationString.indexOf(")"));
sb.append(columnName+" "+typeName+"("+length+"),\n");
}
}
sb.replace(sb.length()-,sb.length(),"\n);");
System.out.println(sb);
} public static void main(String[] args) {
toSQL(Student.class);
}
}
Java Annotation 刷课笔记(一)的更多相关文章
- Java Annotation 刷课笔记(二)
1.反射机制性能问题(安全检查) 1.1setAccessible 启用和禁用访问安全检查的开关,值为true,则指示反射的对象在使用时应该取消Java语言访问检查,值为false,则指示反射的对象应 ...
- Udacity调试课笔记之断言异常
Udacity调试课笔记之断言异常 这一单元的内容不是很多,如Zeller教授所说,就是如何写.检查断言,并如何使用工具实现自动推导出断言的条件. 现在,多数的编程语言,尤其是高级编程语言都会有内置的 ...
- java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)
java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...
- java之jvm学习笔记五(实践写自己的类装载器)
java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...
- Java自动化环境搭建笔记(2)
Java自动化环境搭建笔记(2) 自动化测试 在笔记一中已经完成了一键构建项目.xml指定规划测试集.数据解耦与allure报告生成的开发.接下来便是: 浏览器驱动通过配置启动 页面元素定位解耦,通过 ...
- Java自动化环境搭建笔记(1)
Java自动化环境搭建笔记(1) 自动化测试 先搭建java接口测试的环境: 使用mvn命令构建项目 测试集通过testNG.xml组织并运行 测试数据解耦,通过Excel等文件提供 基础依赖 创建m ...
- 《Data Structures and Algorithm Analysis in C》学习与刷题笔记
<Data Structures and Algorithm Analysis in C>学习与刷题笔记 为什么要学习DSAAC? 某个月黑风高的夜晚,下班的我走在黯淡无光.冷清无人的冲之 ...
- Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介)
原文:Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介) 版权声明:本文为博主原创文章,遵循CC 4.0 BY ...
- Java二次复习笔记(1)
Java二次复习笔记(1) Java采用的默认字符编码集是Unicode. byte=byte+byte报错,值为int,而byte+=byte不报错.同样short = short+short报错, ...
随机推荐
- linux交叉编译Windows版本的ffmpeg
主要参考http://www.cnblogs.com/haibindev/archive/2011/12/01/2270126.html 在我的机器上编译libfaac的时候 出现问题了 输出如下 . ...
- docker镜像和加速
首先,需要明确一个问题:Mirror 与 Private Registry 有什么区别? Private Registry 是开发者或者企业自建的镜像存储库,通常用来保存企业内部的 Docker 镜像 ...
- cannot assign to struct field xxx in map
golang 中对 map 类型中的 struct 赋值报错 type s struct{ name string age int}func main(){ a := map[string]s{ &q ...
- 【算法与数据结构】图的最小生成树 MST - Prim 算法
Prim 算法属于贪心算法. #include <stdio.h> #define VERTEXNUM 7 #define INF 10000 typedef struct Graph { ...
- 干货 | 剑指offer系列文章汇总
下面是名企面试中经常会出现的面试题目,大家可以戳相应的题目查看题目细节,其答案会在紧接着的后一篇中出现 剑指offer系列 始 剑指offer—灯管问题(1) 剑指offer—10人电梯(2) ...
- java 多线程并发问题总结
java 多线程并发主要通过关键字synchronized实现 Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问 ...
- java 中的equals()小结
转载自http://www.cnblogs.com/jackyrong/archive/2006/08/20/481994.html Java中的equals是十分重要的,和= =要区别开来,最近在看 ...
- [Git] 014 远程仓库篇 第一话
0. 前言 在 [Git] 001 初识 Git 与 GitHub 之新建仓库 中,我在 GitHub 上建了一个仓库 "interesting" 这回的任务 把远程的 " ...
- 如何学习MySQL数据库管理员(OCP)认证(转)
如何学习MySQL数据库管理员(OCP)认证 转自: 甲骨文专家中,MySQL 5.6数据库管理员( OCP )证明您的安装和优化MySQL服务器,设置复制和安全,执行数据库备份及性能优化和保护M ...
- 获取kafka最新offset-scala
无论是在spark streaming消费kafka,或是监控kafka的数据时,我们经常会需要知道offset最新情况 kafka数据的topic基于分区,并且通过每个partition的主分区可以 ...