- 浏览: 131085 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
qindongliang1922:
不错!
linux sort 命令 -
eve:
这个还真没注意,8错
protected访问权限又理解了一下 -
imp860124:
学习了。
struts ActionForward跳转添加参数
通过一个例子来认识注解:由javaBean注解生成建表sql
定义表名注解
定义字段注解
定义普通javaBean,用上面的注解界定建表sql
解析注解生成建表sql
定义表名注解
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /*注解的分类 * 1.标记注解(marker annotation) * 注解体内没有定义任何元素,只起一个标记提示作用 * 常见的就是java.lang包下的Deprecated,Override,SuppressWarnings Deprecated 编译时会提示方法过时 Override 编译时验证重写父类方法签名是否正确 SuppressWarnings 取消警告 2.元注解 只用来修饰注解定义的注解 下面用到的Retention,Target Retention用来指定定义的注解要保留到什么时候 有三个枚举值: RetentionPolicy.SOURCE 编译是会调用,不会保留到class文件中 RetentionPolicy.CLASS 会跟随保留到class文件中 RetentionPolicy.RUNTIME 保留到class文件中,并且class被加载时还可以通过反射操作注解 Target用来规定注解可以修饰的程序元素的种类 其有一个ElementType[]的枚举数组参数 ElementType.PACKAGE 包 ElementType.TYPE 类,接口,注解,枚举 ElementType.METHOD 方法声明 ElementType.FIELD 字段 ...... * 注解一旦定义好之后,就可以像使用public,static这样的的modifiers一样,用注解修饰类,方法或属性 */ @Retention(RetentionPolicy.RUNTIME)//可以保留到类被加载运行时 @Target(ElementType.TYPE) //指定该注解用来修饰类... public @interface Table { //定义注解的关键字@interface /* * 元素定义的返回类型限定为:基本类型,String,Class,emum,annotation 或者是前述类型的数组 */ String name(); }
定义字段注解
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 { int length() default 0; //用来存放字段的长度 String name() default "" ;//用来存放字段的名字 //至于数据库字段的类型,后面根据反射获取成员变量的类型获取 }
定义普通javaBean,用上面的注解界定建表sql
import java.util.Date; /* * 一个简单使用例子,根据注解生成创建表语句 * 使用注解时,可以用key-value键值对的形式为注解的元素赋值 */ @Table(name="table_person") //表名 public class PersonBean { @Column(length=8,name="person_id") private Integer id; @Column(length=32,name="pname") private String name; @Column(name="birth") //Date类型不需要指定length private Date birth; public Integer getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; } }
解析注解生成建表sql
import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Date; public class TestMain { //用来解析所有成员变量的方法 public static String[] getColumns(Field[] fArr){ String[] columns = new String[fArr.length]; String columnName=""; int columnLength=0; String columnType = ""; for(int i=0;i<fArr.length;i++){ Field f = fArr[i]; String name = f.getName(); //成员变量名 Class type = f.getType(); //成员变量类型 //判断该成员变量上是不是存在Column类型的注解 if(f.isAnnotationPresent(Column.class)){ //存在 Column c = f.getAnnotation(Column.class);//获取实例 //获取元素值 columnName = c.name(); columnLength = c.length(); } //如果未指定列名,默认列名使用成员变量名 if("".equals(columnName)){ columnName = name; } //如果未指定字段长度,默认32 if(0 == columnLength){ columnLength = 32; } //如果成员变量是String类型的,数据库字段是varchar类型 if(String.class == type){ columnType = "varchar"; }else if(Integer.class == type){ columnType = "number";//Integer类型的用number } //把每一个成员变量相关信息存放到返回数组中 if(Date.class == type){//Date类型的用date columns[i] = columnName+" date"; }else{ columns[i] = columnName+" "+columnType+"("+columnLength+")"; } } return columns; } public static void main(String[] args) throws Exception { StringBuffer sql = new StringBuffer("create table "); Class c1 = Class.forName("com.cao.annotation.PersonBean");//加载使用注解的bean,(bean的路径包括bean的包) if(c1.isAnnotationPresent(Table.class)){ //该class存在Table类型的注解,获取指定的表名 Table table = (Table) c1.getAnnotation(Table.class); String tableName = table.name(); sql.append(tableName+" ("); } //获取bean所声明的成员变量(include private) Field[] fArr = c1.getDeclaredFields(); //解析这些字段的注解设定值 String[] columns = getColumns(fArr); //拼接解析后的成员变量信息成创建表语句 for(int i=0;i<columns.length;i++){ if(i==(columns.length-1)){ sql.append("\n"+columns[i]+")"); }else{ sql.append("\n"+columns[i]+","); } } System.out.println(sql.toString()); /*结果: * create table table_person ( person_id number(8), pname varchar(32), birth date) */ } }
发表评论
-
java 工程中静态常量类问题
2015-05-27 10:42 1010在搭建java工程时,一般都会建有一个常量类Constants ... -
java计算排列结果内容
2014-06-16 11:06 597递归方法 /** * 递归计算 * @param ... -
java 序列化
2014-03-18 17:41 897以有序的字节数组形式描述java对象, 包括对象的描述信息(类 ... -
HttpClient 登陆iteye
2014-02-21 16:10 1066static String cookie; static ... -
java 调用 oracle 存储过程
2014-02-08 14:45 606private static String url =&qu ... -
log4j 配置
2014-01-22 17:49 674log4j日志配置 1.log4j.rootLogger ... -
tomcat 使用log4j记录分割日志
2014-01-16 10:51 5581tomcat日志记录默认使用java.util.logging ... -
java 正则
2013-10-29 16:47 749\d 数字0-9 \D 非数字[^0-9] \s 空白字符[ ... -
javabean 嵌套属性赋值
2013-04-02 09:33 1656import java.beans.PropertyD ... -
eclipse 取消汉化
2013-03-06 11:36 1887方法一:在eclipse.ini文件中添加启动参数 -Duse ... -
java 进度条上传
2013-02-28 10:00 908上传ajax方式,可用juery.ajaxupload插件 ... -
java 调用 webservice
2013-01-07 11:14 2227只想调用远处webservice,不构建自己的,看了一些资料都 ... -
java nio SocketChannel 服务器端与多客户端 信息交互(聊天功能)
2013-01-05 15:24 5037服务器端: import java.io.IOExcept ... -
java nio buffer
2012-12-31 17:54 1095buffer是固定数量的数据的容器,可以被填充和读取。 一个 ... -
java Integer
2012-09-06 14:33 0java Integer比较 public stat ... -
Apache Commons DbUtils
2011-12-06 11:11 1541dbutils jar下载地址http://labs.renr ... -
solr服务器的搭建与简单使用
2011-08-17 11:30 0solr安装: 1.下载(v1.4.1) ht ... -
protected访问权限又理解了一下
2011-06-30 14:46 1665看java的克隆时遇到问题 不能直接调用Object类的clo ... -
lucence hello world
2011-04-27 12:24 1127/* * lucence version 3.0.3 ... -
局域网流量监控原理(java)
2011-04-25 11:11 2339使用jpcap开源java包。(http://netresea ...
相关推荐
Java Annotation注解技术是自Java SE 5.0版本引入的一种元编程机制,它允许程序员在源代码的各个层面(如类、方法、变量等)添加元数据,以供编译器、JVM或第三方工具在编译时或运行时进行处理。Annotation简化了...
Java Annotation,也称为注解,是Java编程语言中的一种元数据机制,用于向编译器、JVM或工具提供有关代码的附加信息。这些信息不直接影响代码的执行,但可以被编译器或运行时环境用来执行特定的操作,如代码分析、...
本篇将深入探讨Java Annotation注解的相关知识点。 1. **注解类型**: Java提供了三种类型的注解:源码级注解、编译器级注解和运行时注解。源码级注解在编译后不保留,只用于源码阶段;编译器级注解会影响编译过程...
Java Annotation,也称为注解,是Java编程语言中的一种元数据机制,自JDK 5.0开始引入。注解提供了在源代码中嵌入元数据的能力,这些元数据可以被编译器、构建工具或者运行时环境用来处理代码。它们在代码中看起来...
Java.Annotation注解.part4
Java.Annotation注解.part3
Java.Annotation注解.part2
Java.Annotation注解.part1
### Java自定义注解Annotation的使用 #### 1. 前言 自从JDK 1.5引入了注解这一特性以来,它已经成为Java开发中的一个重要组成部分。注解最初是为了推动EJB 3.0的普及和发展而设计的,其目的是减少配置文件的使用,...
如果你想知道java annotation是什么?你可以看看
在Java编程语言中,Annotation(注解)是一种元数据,它提供了一种安全的方法来将信息附加到代码中,而不必改变代码的行为。注解在编译时或运行时被读取,通常用于代码分析、编译器警告、运行时处理等。下面我们将...
### Spring框架中的Annotation注解详解 #### 一、Spring与Annotation的基本概念 Spring框架通过引入Annotation,极大地简化了Java开发中的依赖注入(Dependency Injection, DI)和面向切面编程(AOP)的过程。...
Java Annotation(注解)是自 Java 5.0 开始引入的一种语言元素,它为开发者提供了在代码中添加元数据的能力。简单来说,注解就像是对代码进行标记或注释的方式,这些标记可以在编译时或者运行时被读取并执行特定的...
Java 自定义注解验证是Java开发中的一个重要特性,它允许开发者创建自己的元数据,以便在编译时或运行时对代码进行验证和处理。自定义注解为代码提供了额外的信息,使得程序更具可读性、可维护性和灵活性。在本案例...
### Annotation注解的深入解析与应用 #### 一、Annotation概览 ##### 1.1 何为元数据 元数据,在计算机科学中,是指用于描述数据的数据,它提供了关于数据本身的附加信息,有助于理解、解释和管理数据。在编程...
Java注解Annotation用起来很方便,也越来越流行,由于其简单、简练且易于使用等特点,很多开发工具都提供了注解功能,不好的地方就是代码入侵比较严重,所以使用的时候要有一定的选择性。 这篇文章将利用注解,来做...
在Java中,注解(Annotation)主要用于编译器检查、代码生成、运行时处理等方面。本文将深入探讨如何通过反射机制来获取自定义注解以及其在字段上的应用。 首先,我们需要了解什么是自定义注解。自定义注解是以`@`...
用注解的方式定义一个Servlet,就不用在web.xml中配置了。Servlet的访问URL是Servlet的必选属性,可以选择使用urlPatterns或者value定义。 像上面的AnnotationServlet可以描述成@WebServlet(name="Annotation...
Java自定义注解是Java编程语言中的一个重要特性,它允许程序员在代码中插入元数据,这些元数据可以被编译器或运行时环境用来执行特定的任务。自定义注解不仅提高了代码的可读性,还简化了代码处理,特别是在框架和库...