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. ...
随机推荐
- iis和apache共享80端口
Windows server 2003服务器上安装有默认 IIS 6和Apache两个服务器,IIS运行的一个.net程序,apache运行php程序,现在想让它们同时都能通过80端口访问,设置起来还 ...
- Linux bridge
CentOS bridge 配置: 1.创建br0配置文件 touch /etc/sysconfig/network-scripts/ifcfg-br0 2.修改bro配置文件 vi /etc/sy ...
- 轻量级的Java 开发框架 Spring
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development a ...
- 解决Linux系统在设置alias命令重启后失效的问题
在使用linux系统的过程中,大多数情况下都是在字符界面下进行的.有些比较长的命令我们不希望每次都重复输入,这样不仅浪费时间而且还容易出错:我们会使用alias命令来解决 比如: alias ll=' ...
- 关于Json如何转换成对象及获值问题!
var result = eval('('+result+')'); result为Json 转换成var result对象,可以 if(result.success){ window.locatio ...
- BZOJ4311:向量
题意:要求支持三个操作,加入删除一个向量,询问当前向量与给定向量的最大值. 题解:线段树时间分治,每个区间做一个凸包,查询的时候到对应区间的凸包上三分. (话说我这个可能有点问题,三分那一块R-L&g ...
- SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法
软件152 尹以操 首先谢谢大佬的简书文章:http://www.jianshu.com/p/45ad65690e33# 这篇文章中讲的是spring中使用spring data jpa,使用了xml ...
- hdu 5876 Sparse Graph 无权图bfs求最短路
Sparse Graph Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) P ...
- if 条件判断 和 判断总结---shell脚本
本文主要介绍了Shell脚本IF条件判断和判断条件总结,本文先是给出了IF条件判断的语法,然后给出了常用的判断条件总结,需要的朋友可以参考下. 前言: 无论什么编程语言都离不开条件判断.SHELL也不 ...
- 如何在windows上部署war包到tomcat服务器
一. 什么是war包 WAR(Web Archive file)网络应用程序文件,是与平台无关的文件格式,它允许将很多文件组合成一个压缩文件.war专用在web方面,一个war包可以理解为一个web项 ...