`
dreamoftch
  • 浏览: 498061 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

自定义注解的定义和解析

阅读更多

 

think in java的例子:

 

首先是几个自定义注解

 

package com.tch.test.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface DBTable {

	public String name() default "";
	
}

 

package com.tch.test.annotation;

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 Constraints {

	public boolean primaryKey() default false;
	
	public boolean allowNull() default false;
	
	public boolean unique() default false;
	
}

 

package com.tch.test.annotation;

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 SQLInteger {

	String name() default "";
	
	Constraints constraints() default @Constraints;
	
}

 

package com.tch.test.annotation;

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 SQLString {

	int value() default 0;
	
	String name() default "";
	
	Constraints constraints() default @Constraints;
	
}

 

然后使用这几个注解:

 

package com.tch.test.annotation;
@DBTable(name="member")
public class Member {
	@SQLString(30)
	private String firstName;
	
	@SQLString(50)
	private String lastName;
	
	@SQLInteger
	private Integer age;
	
	@SQLString(value=30,constraints=@Constraints(primaryKey=true))
	private String handle;
	
}

 

 

解析注解,生成SQL语句

 

package com.tch.test.annotation;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class Test {

	public static <T> void annotationCheck(Class<T> clazz){
		DBTable c = clazz.getAnnotation(DBTable.class);
		if(c == null){
			System.out.println("没有注解");
		}
		Field[] field = clazz.getDeclaredFields();
		List<String> columnDef = new ArrayList<String>();
		for(Field f : field){
			SQLString ss = f.getAnnotation(SQLString.class);
			SQLInteger si = f.getAnnotation(SQLInteger.class);
			if(ss != null){
				columnDef.add(" "+f.getName()+" varchar("+ss.value()+") "+getConstraints(ss.constraints()));
			}
			if(si != null){
				columnDef.add(" "+f.getName()+" int "+getConstraints(si.constraints()));
			}
		}
		StringBuilder sb = new StringBuilder();
		sb.append("create table "+c.name()+"(");
		for(String s:columnDef){
			sb.append("\n"+s+" ,");
		} 
		String result = sb.substring(0, sb.length()-1);
		result = result+"\n)";
		System.out.println(result);
	}
	public static String getConstraints(Constraints con){
		String result = "";
		if(! con.allowNull()){
			result+=" not null ";
		}
		if(con.primaryKey()){
			result+=" primary key ";
		}
		if(con.unique()){
			result+=" unique ";
		}
		return result;
	}
	
	public static void main(String[] args) {
		
		annotationCheck(Member.class);
		
	}
	
}

 

 结果:

create table member(
 firstName varchar(30)  not null  ,
 lastName varchar(50)  not null  ,
 age int  not null  ,
 handle varchar(30)  not null  primary key  
)

 

 

 

分享到:
评论

相关推荐

    Spring 自定义注解的解析

    总的来说,Spring自定义注解的解析是一个强大且灵活的工具,可以帮助我们实现更精细化的代码组织和控制。结合`@ComponentScan`,我们可以轻松地在Spring环境中管理和利用自定义注解,进一步提升代码的可读性和可维护...

    excel导入动态校验,自定义注解动态校验

    本文将详细探讨"Excel导入动态校验,自定义注解动态校验"这一主题,旨在帮助你理解和掌握如何在处理Excel数据时进行有效的验证和校验。 首先,Excel导入动态校验是指在将Excel数据导入到系统或数据库时,对数据进行...

    实现生成自定义注解的实体类

    自定义注解的价值在于解析和使用这些注解。Java提供反射机制来获取类、方法等的元数据,包括它们上的注解。以下是如何在运行时获取并处理`MyEntity`注解的示例: ```java public class AnnotationProcessor { ...

    java 自定义注解例子

    在Java编程语言中,注解(Annotation)是一种元数据,它提供了向编译器或JVM提供信息的方式,这些信息可以用于代码...在自动售卖机的例子中,我们展示了如何创建、使用和解析自定义注解,以实现对商品状态的有效管理。

    spring中自定义注解(annotation)与AOP中获取注解

    首先,自定义注解是Java语言提供的一种元数据机制,它允许我们在代码中添加额外的信息,而这些信息可以在编译时或运行时被解析和使用。在Spring中,自定义注解通常用于简化配置、实现依赖注入、标记特定行为等。要...

    java自定义注解和通过反射获取注解

    自定义注解的定义使用`@interface`关键字,可以包含默认值和元素。例如: ```java @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyAnnotation { String value() default ...

    java自定义注解实现由类自动生成表

    在本案例中,我们将探讨如何利用自定义注解实现在Java类定义后自动创建对应的数据库表,以适应SQL Server和Oracle这样的关系型数据库。 首先,我们需要理解自定义注解的基本结构。在Java中,你可以通过`@interface`...

    自定义注解实现过滤实例

    1. **自定义注解的定义**: 自定义注解是以`@interface`关键字声明的。它们可以包含元素(也称为成员),这些元素可以有默认值或需要提供值。例如,我们可以创建一个名为`@Filtered`的注解,用于标记需要进行特定...

    自定义注解bindview.zip

    自定义注解允许我们创建自己的标记,这些标记可以被编译器、构建工具或其他工具解析,以执行特定的操作。 要创建一个自定义注解,我们需要在Java代码中定义一个注解类型。在我们的例子中,我们将创建一个名为`...

    SpringBoot AOP各种注解、自定义注解、鉴权使用案例(免费下载)

    自定义注解增强了代码的可读性和可扩展性,而权限验证则确保了系统的安全性。通过理解和实践这些概念,可以大大提高SpringBoot应用的开发效率和质量。在提供的`demo2`文件中,可能包含了这些概念的具体示例代码,...

    java SpringBoot自定义注解,及自定义解析器实现对象自动注入操作

    Java SpringBoot 自定义注解及自定义解析器实现对象自动注入操作 在 Java SpringBoot 框架中,自定义注解和自定义...在实际开发中,我们可以根据需要定义不同的自定义注解和解析器,以便更好地实现对象自动注入操作。

    自定义注解案例

    在TestAnnotation项目中,你可以找到一个具体的自定义注解案例,包括注解的定义、使用和通过反射进行解析的示例代码。通过研究这个案例,你将更深入地理解自定义注解在实际项目中的工作原理和用途。

    java自定义注解

    Java自定义注解是Java平台提供的一种元编程机制,它允许程序员在代码中插入特定的标记,这些标记可以在编译时或运行时被处理器解析,从而实现特定的功能。自定义注解可以用来增强代码的可读性,简化代码处理,以及...

    自定义注解MVC

    - 当创建了自定义注解后,通常需要一个注解处理器(Annotation Processor)来解析并处理这些注解,执行相应的操作,如生成代码、验证代码或进行其他元编程。 - 在Java中,通过实现`javax.annotation.processing....

    注解+自定义注解+元注解+理解

    在Java中,我们可以通过定义一个@interface关键字来创建自定义注解。自定义注解可以包含元素(也称为成员),这些元素可以是基本类型、字符串或者其他的注解。 ```java @Retention(RetentionPolicy.RUNTIME) @...

    自定义注解annotation及用法

    自定义注解的定义以`@interface`关键字开始,后面跟着注解的名称。注解的属性通常称为元素,它们可以有默认值。例如,定义一个简单的日志注解: ```java public @interface Loggable { String value() default "";...

    Android自定义注解

    在Android开发中,自定义注解(Custom Annotation...总之,Android自定义注解是提高开发效率和代码质量的有效手段。通过合理利用注解,我们可以创建更加灵活、可维护的项目,使代码更加简洁、易读,从而提升开发体验。

    java自定义注解学习范例

    Java自定义注解是Java语言...通过定义、使用和解析自定义注解,我们可以为代码添加元数据,实现各种自定义逻辑,从而提高开发效率和代码质量。在实际项目中,应根据需求合理利用注解,避免过度使用导致代码复杂性增加。

    android自定义注解实现findview和click

    本文将深入探讨如何使用自定义注解来实现`findViewById`和`setOnClickListener`的功能,同时支持Activity和Fragment。 首先,我们需要了解什么是注解(Annotation)。在Java和Android中,注解是一种元数据,它提供...

Global site tag (gtag.js) - Google Analytics