自己定义java注解

来源:互联网 发布:中华老黄历软件 编辑:程序博客网 时间:2024/05/20 05:57

先定义类,字段,方法上的注解 然后在通过反射解析这些注解

1:自定义类注解

import java.lang.annotation.Documented;
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)//你这个注记什么时候起作用
@Documented
public @interface DesClass {
 String description();
 String tableName();
}

 

2:自定义字段注解

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

@Documented
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DesField {
 String desField();
 String fieldname();
}

 

3:自定义方法注解

 

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 DesMethod {
 String desmethod();
}

 

使用注解:

@DesClass(description="实体类Student对应数据库中表sys_student",tableName="sys_student")
public class Student {
 @Id(keyname="s_id",keytype = "auto")
 @DesField(desField="类的成员ID",fieldname="s_id")
 private int id;
 @DesField(desField="类的成员姓名",fieldname="s_name")
 private String name;
 @DesField(desField="类的成员年龄",fieldname="s_age")
 private int age;
 public int getId() {
  return id;
 }
 @DesMethod(desmethod="设置ID")
 public void setId(int id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 
}

 

解析注解:

import java.lang.reflect.Field;
import java.lang.reflect.Method;


public class DesStudentTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Class c = Student.class;
  //判断Student字节码对象是否有DesClass注记
  boolean flag = c.isAnnotationPresent(DesClass.class);
  if(flag){
   //取出Student类的DesClass注记对象
   DesClass des = (DesClass)c.getAnnotation(DesClass.class);
   System.out.println(des.description());
   System.out.println(des.tableName());
  }
  
  Field[] fs = c.getDeclaredFields();
  for (Field field : fs) {
   if(field.isAnnotationPresent(Id.class)){
    Id id = (Id)field.getAnnotation(Id.class);
    System.out.println("字段名是:"+id.keyname()+"主键生成方式是:" + id.keytype());
   }
   if(field.isAnnotationPresent(DesField.class)){
    DesField df = (DesField)field.getAnnotation(DesField.class);
    System.out.println(df.fieldname());
    
   }
  }
  
  
  Method[] m = c.getMethods();
  for (Method method : m) {
   if(method.isAnnotationPresent(DesMethod.class)){
    DesMethod dm = (DesMethod)method.getAnnotation(DesMethod.class);
    System.out.println(dm.desmethod());
   }
  }
  

 }

}

 

 

 

原创粉丝点击