Java基础--注解Annotation
Annotation是给类,方法或域上加的一种特殊的标记,可以通过反射取到注解的类型和值,从而完成某种特定的操作。
定义注解需要使用元注解,元注解有@Retention和@Target
//@Retention用来定义该注解在哪一个级别可用,在源代码中(SOURCE),类文件中(CLASS),或者运行时(RUNTIME)
//@Target用来定义注解将用在什么地方 类,方法,域...
比如:
@Retention(RetentionPolicy.RUNTIME) 表明在运行时保留该注解
@Target(ElementType.METHOD) 表明为方法注解,只能在方法声明中使用
注解不支持继承,注解元素的类型可以是基本类型,String,Class, enum, 和另一个注解。
没有元素的注解称为标记注解。
简单例子:
----------根据Java Bean建立数据库表-----------
//数据库字段属性枚举
public enum EOption {
//可空
NONE, //非空
NOT_NULL, PRIMARY, UNIQUE; public boolean withIn(EOption[] options){
for(EOption o : options){
if(o==this){
return true;
}
}
return false;
} }
----------
//数据库字段类型枚举
public enum EType { //自动判断
AUTO, CHAR, VARCHAR, SMALLINT, INT, BIGINT, TEXT, BLOB, DATE;
}
---------数据表注解------
@Retention(RUNTIME)
@Target(TYPE)
public @interface DTable {
//表名
public String name() default ""; }
--------表字段注解------
@Retention(RUNTIME)
@Target(FIELD)
public @interface DColumn { //字段类型
EType type() default EType.VARCHAR; //类型相关值
int value() default 10; //字段名称
String name() default ""; //字段属性
EOption[] option() default EOption.NOT_NULL; }
--------测试Bean-----
@DTable(name="user_t")
public class UserBean { @DColumn(type=EType.INT, option={EOption.NOT_NULL, EOption.PRIMARY})
private int id; @DColumn(30)
private String name; @DColumn(type=EType.INT)
private Integer age; @DColumn(30)
private String email; @DColumn(type=EType.DATE)
private String create_date; }
--------执行建表--------
public class TableCreator {
private static String getCon(EOption[] options) {
String ret = "";
if (EOption.NOT_NULL.withIn(options)) {
ret += " NOT NULL ";
}
if (EOption.PRIMARY.withIn(options)) {
ret += " PRIMARY KEY ";
}
if (EOption.UNIQUE.withIn(options)) {
ret += " UNIQUE ";
}
return ret;
}
public static void main(String[] args) throws ClassNotFoundException {
String classname = "dbAnnotation.UserBean";
Class<?> c = Class.forName(classname);
DTable table = (DTable) c.getAnnotation(DTable.class);
if (table == null) {
System.out.println(c.getName() + " no DTable Annotation");
return;
}
String tableName = table.name();
if (tableName.length() < 1) {
tableName = c.getName().toLowerCase();
}
List<String> columnNames = new ArrayList<>();
for (Field f : c.getDeclaredFields()) {
Annotation[] a = f.getDeclaredAnnotations();
if (a.length < 1) {
continue;
}
DColumn dcol = (DColumn) a[0];
String cName = dcol.name().length() < 1 ? f.getName().toLowerCase() : dcol.name();
if (dcol.type() == EType.INT)
{
columnNames.add(cName + " INT" + getCon(dcol.option()));
}
else if (dcol.type() == EType.VARCHAR)
{
columnNames.add(cName + " VARCHAR(" + dcol.value() + ")" + getCon(dcol.option()));
}
}
StringBuilder sb = new StringBuilder();
sb.append("create table ");
sb.append(tableName);
sb.append(" (\n");
for (String s : columnNames) {
sb.append(s);
sb.append(",\n");
}
sb.append(")");
System.out.println(sb.toString());
}
}
-------输出------
create table user_t (
id INT NOT NULL PRIMARY KEY ,
name VARCHAR(30) NOT NULL ,
age INT NOT NULL ,
email VARCHAR(30) NOT NULL ,
)
-------
end
Java基础--注解Annotation的更多相关文章
- java基础-注解Annotation原理和用法
在很多java代码中都可以看到诸如@Override.@Deprecated.@SuppressWarnings这样的字符,这些就是注解Annotation.注解最早在jdk5中被引入,现在已经成为j ...
- java基础—注解annotation
一.认识注解 注解(Annotation)很重要,未来的开发模式都是基于注解的,JPA是基于注解的,Spring2.5以上都是基于注解的,Hibernate3.x以后也是基于注解的,现在的Struts ...
- Java 基础 —— 注解 Annotation
简介 Annotation 是从 JDK 5.0 引入的. 注解使得我们可以以编译器验证的格式存储程序的额外信息.注解可以生成描述符文件,甚至是新的类定义,并且有助于减轻编写"样板" ...
- Java基础笔记 – Annotation注解的介绍和使用 自定义注解
Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 | 被围观 25,969 views+ 1.Anno ...
- Java Android 注解(Annotation) 及几个常用开源项目注解原理简析
不少开源库(ButterKnife.Retrofit.ActiveAndroid等等)都用到了注解的方式来简化代码提高开发效率. 本文简单介绍下 Annotation 示例.概念及作用.分类.自定义. ...
- Java中注解Annotation的定义、使用、解析
此例子,用于说明如何在Java中对“注解 Annotation”的定义.使用和解析的操作.注解一般用于自定义开发框架中,至于为什么使用,此处不作过多说明,这里只说明如何使用,以作备记.下面例子已测试, ...
- Java:注解Annotation(元数据)
本文内容: 注解Annotation的介绍 基本注解的用法 自定义注解 首发日期:2018-07-28 注解Annotation的介绍 Annotation是代码中的特殊标记,能够在编译.类加载.运行 ...
- Java基础—注解(转载)
概念 注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法.局部变量.方法参数等的前面 ...
- Java的注解(Annotation)
1.什么是注解 Annotation is code about the code, that is metadata about the program itself. Java注解,是Java5. ...
随机推荐
- Qt配置USBCAN通信
周立功为CAN通信提供了动态库:官方提供了很多相关动态库和lib等,如图 ,其中kerneldlls里还有很多动态库,还有一个配置文件.其实这么多的文件,如果我们只用到USBCAN2通信,只需要ker ...
- 标准库string与C风格字符串
返回字符串的长度 string标准库 #include<iostream> #include<cstring> using namespace std; int main() ...
- 服务器windows 2003 安装SQL 2000+SP4
(在windows 2003安装SQL 2000,对于03系统是没有32位和64位之分的) (32位系统需要重启机器,64不需要) 在站点下载数据库 解压后有两个文件夹 首先安装SQL2000 第1步 ...
- SpringMVC实现AJax以及RestFull风格
RestFull风格就是url路径中不能出现?不能带参数,如https://www.baidu.com/user/item/1234这个格式,也叫url资源定位 1.需要在web.xml中开启put, ...
- 安装配置Apollo-Prota web中心平台
首先要求2g以上内存哈,JDK1.8 搭建数据库 创建表 apollo-build-scripts-master 整个阿波罗环境包 使用一个命令启动整个阿波罗服务环境 创建两个数据库 分别为:apol ...
- hive学习8(小案例1练习)
创建数据库 hive> create database feigu; hive> use feigu; 创建表 stg_job表 drop table if exists stg_job; ...
- 批量测试邮箱登录python脚本
---恢复内容开始--- #!/usr/bin/env python #-*- coding:utf-8 -*- import smtplib import sys import time impor ...
- 查找和删除倒数第n个节点的问题
class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } public class NthNodeFromEnd ...
- Teamviewer_相关
1.官网下载:https://www.teamviewer.com/zhcn/download/windows/,里面选择 "Portable"的版本来下载(按钮"下载P ...
- nova Rescue 和 Unrescue
usage: nova rescue [--password <password>] [--image <image>] <server> Reboots a se ...