Java注解annotation用法和自定义注解处理器

前言:

在J2EE中,注解使得开发更加便利,香港服务器租用,省去了生成XML文件的过程,在Hibernate实体声明中,可以简简单单的用几个注解就可以免去生成一个XML的文件操作。这里就主要论述一下annotation的用法和自定义注解处理器。当在创建描述符性质的类或接口时,有大量重复性的工作时候,就可以利用注解来实现。

基本语法:

Java目前包括三种标准注解和四种元注解。元注解主要负责注解其他注解的。

三种标准注解:

@Override,表示当前的方法定义覆盖了父类中的方法。必须要有相同的方法签名即(方法名,参数类型,参数顺序,参数个数)都一样。否则在编译过程中发出错误提示。

@Deprecated,对不应该再使用的方法添加注解,当使用这个方法的时候,会在编译时候显示提示信息。

@SuppressWarnings,关闭不当的编译器报警信息

四种元注解:

@Target,表示该注解可以用什么地方。

如CONSTRUCTOR,构造器声明;FIELD,域声明;METHOD,方法声明;TYPE,美国服务器,类,接口或enum声明

@Retention,表示需要在什么级别保存该注解信息。

如SOURCE,注解将被编译器丢弃;CLASS,注解在class文件可用,但会被VM丢弃

RUNTIME,VM将在运行期间也保留注解,可以使用反射机制读取注解信息

@Documented,将此注解包含到Javadoc中。

@Inherited,允许子类继承父类的注解。

定义注解:

自定义注解是以@interface为标志的。如同一个接口的定义,这里面定义的每个方法名,就是使用注解时候的元素名,方法的返回值就是元素的类型,可以利用default来声明默认值,不过对于非基本类型,不能设置为null为默认值,一般对于字符串使用空字符串作为其默认值。

如下所示:

package whut.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;//定义一个注解@Target(ElementType.METHOD)//定义该注解将应用于什么地方,方法或者域@Retention(RetentionPolicy.RUNTIME)//定义该注解在哪一个级别可用public @interface UseCase {//注解元素,可以指定默认值,在使用注解的时候,可以直接给元素赋值如id=5public int id();public String description() default “no description”;//利用枚举来设置参数类型public enum ParameterType { STRING, SHORT, INT, BOOL, LONG, OBJECT };// 默认值,在使用注解的时候,只需要为元素赋值public ParameterType type() default ParameterType.STRING;}

使用注解:

在类中任意的域值前,或者方法前等直接@注解名,如@UseCase(id=5),使用注解的过程中,必须对于没有设置默认值的元素进行赋值操作,对于每个元素进行按照名-值对的方式赋值。如果在注解定义中有名为value的元素,并且它是唯一需要赋值的,可以直接在括号里给出value所需要的值。

注解是不能继承的。

下面是一个基本的利用非apt实现的注解处理器模型。

这个模型可以注解实体,进行数据库的映射建表操作。是最最基本的操作。

注解定义:将四个注解名是在不同的文件中。

package whut.annotationDB;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 {boolean primaryKey() default false;boolean allowNull() default true;boolean unique() default false;}////////////////////////////package whut.annotationDB;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(ElementType.TYPE)//类,接口或enum@Retention(RetentionPolicy.RUNTIME)//定义表名的注解public @interface DBTable {public String name() default “”;}///////////////////////////package whut.annotationDB;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(ElementType.FIELD)//类,接口或enum@Retention(RetentionPolicy.RUNTIME)public @interface SQLInteger {String name() default “”;//嵌套注解的功能,将column类型的数据库约束信息嵌入其中Constraints constraints() default @Constraints;}///////////////////////////////package whut.annotationDB;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(ElementType.FIELD)//类,接口或enum@Retention(RetentionPolicy.RUNTIME)public @interface SQLString {int value() default 0;String name() default “”;//注解元素中引用别的注解,Constraints constraints() default @Constraints;}

实体使用注解:这里是运用了运行时候处理注解,所以RetentionPolicy.RUNTIME

package whut.annotationDB;@DBTable(name=”MEMBER”)public class Member {//在使用注解过程中,如果有元素是value,并且只有value需要赋值,//则只需要在()中将值写入@SQLString(30)private String firstName;@SQLString(50)private String lastName;@SQLIntegerprivate Integer age;@SQLString(value=30,constraints=@Constraints(primaryKey=true))private String handle;public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getHandle() {return handle;}public void setHandle(String handle) {this.handle = handle;}}仿佛一支飘荡在水上的华丽咏叹调。

Java注解annotation用法和自定义注解处理器

相关文章:

你感兴趣的文章:

标签云: