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 刷课笔记(一)的更多相关文章

  1. Java Annotation 刷课笔记(二)

    1.反射机制性能问题(安全检查) 1.1setAccessible 启用和禁用访问安全检查的开关,值为true,则指示反射的对象在使用时应该取消Java语言访问检查,值为false,则指示反射的对象应 ...

  2. Udacity调试课笔记之断言异常

    Udacity调试课笔记之断言异常 这一单元的内容不是很多,如Zeller教授所说,就是如何写.检查断言,并如何使用工具实现自动推导出断言的条件. 现在,多数的编程语言,尤其是高级编程语言都会有内置的 ...

  3. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  4. java之jvm学习笔记五(实践写自己的类装载器)

    java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...

  5. Java自动化环境搭建笔记(2)

    Java自动化环境搭建笔记(2) 自动化测试 在笔记一中已经完成了一键构建项目.xml指定规划测试集.数据解耦与allure报告生成的开发.接下来便是: 浏览器驱动通过配置启动 页面元素定位解耦,通过 ...

  6. Java自动化环境搭建笔记(1)

    Java自动化环境搭建笔记(1) 自动化测试 先搭建java接口测试的环境: 使用mvn命令构建项目 测试集通过testNG.xml组织并运行 测试数据解耦,通过Excel等文件提供 基础依赖 创建m ...

  7. 《Data Structures and Algorithm Analysis in C》学习与刷题笔记

    <Data Structures and Algorithm Analysis in C>学习与刷题笔记 为什么要学习DSAAC? 某个月黑风高的夜晚,下班的我走在黯淡无光.冷清无人的冲之 ...

  8. Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介)

    原文:Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介) 版权声明:本文为博主原创文章,遵循CC 4.0 BY ...

  9. Java二次复习笔记(1)

    Java二次复习笔记(1) Java采用的默认字符编码集是Unicode. byte=byte+byte报错,值为int,而byte+=byte不报错.同样short = short+short报错, ...

随机推荐

  1. springboot 配置访问本地图片

    spring.mvc.static-path-pattern=/image/** spring.resources.static-locations=file:D://image/

  2. 《Effective Java》读书笔记 - 10.并发

    Chapter 10 Concurrency Item 66: Synchronize access to shared mutable data synchronized这个关键字不仅保证了同步,还 ...

  3. SVN更新报错:Checksum mismatch for ……

    问题: Checksum mismatch while updating '……'; expected: '3f9fd4dd7d1a0304d8020f73300a3e07', actual: 'cd ...

  4. tensorflow 中图像的读取

    1. 使用gfile读入文件内容.输入的是String,输出3-D tensor.可惜的是输入不能是tensor def decode_jpg(path): r""" 读 ...

  5. 【python3】 抓取异常信息try/except

    注意:老版本的Python,except语句写作"except Exception, e",Python 2.6后应写作"except Exception as e&qu ...

  6. Delphi XE2 之 FireMonkey 入门(32) - 数据绑定: TBindingsList: TBindList、TBindPosition [未完成...]

    Delphi XE2 之 FireMonkey 入门(32) - 数据绑定: TBindingsList: TBindList.TBindPosition [未完成...] //待补...

  7. 阶段3 1.Mybatis_09.Mybatis的多表操作_3 完成account的一对一操作-通过写account的子类方式查询

    先把多表查询的sql语句写出来 想要显示的字段 创建一个AccountUser类 继承Account.这样它就会从父类上继承一些信息 这里只需要定义username和address就可以了 .然后生成 ...

  8. Tomcat中出现"RFC 7230 and RFC 3986"错误的解决方法

    在用axios从前台向后台发请求时,后台报错 Invalid character found in the request target. The valid characters are defin ...

  9. python string_3 end 内建函数详解

    以下方法,是在python2上运行的,编码也使用的是python2, 在对比python3后,发现,基本相同,也就是说在print后补上(),使用函数方式,是可以在python3下运行的, 删除了针对 ...

  10. [ScreenOS] How to change the certificate that is used for SSL (HTTPS) WebUI Management

    SUMMARY: This article provides information on how to change the certificate that is used for SSL (HT ...