注解 如何自定義注解 注解的解析


什么是注解?

package com.bjsxt.annotation;

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

/**
 * 注解的作用
 * 1.可以解釋程序含義
 * 2.被其他程序使用
 * 注解的格式:
 * "@注解名" 還可以加參數值 
 * 比如
 * @Override 注解 首字母大寫 表示重寫父類方法
 * @Deprecated 廢棄的 過時的 不建議使用的
 * @SuppressWarnings(value="unchecked")
 * 自定義注解:
 * @Target(value={ElementType.METHOD,ElementType.TYPE})
 * 可以看源文件  TYPE類型里面是枚舉類型 里面 有 類 包  成員變量 局部變量 等等類型 可以理解為全部類型
 * @Retention(RetentionPolicy.RUNTIME)自定義一般都選 runtime 
 * @Retention 保留  三個 范圍  source源文件  class字節碼文件 一般變壓器用前面2個                     runtime 運行時(通過反射讀取)一般自定義用它
 * 
 * 注解在哪使用?
 * 可以在package,class,mthod,field等 相等於加了輔助信息   我們可以通過反射機制實現對這些元數據的訪問
 * @author Administrator
 *
 */
public class TestAnnotation {
    @Override
    //注解 首字母大寫 表示重寫父類方法
    public String toString(){
        return "";
    }
    @Deprecated
    //廢棄的 過時的 不建議使用的
    public static void test001(){
         System.out.println("ok");
    }
    public static void main(String[] args) {
        //雖然是不建議使用 但是可以使用
        test001();
    }
    @SuppressWarnings("all")
    //忽略 警告
    public static void test002(){
        
        
    }
}

如何自定義注解

package com.bjsxt.annotation;

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

/**
 * 自定義注解
 * 元注解 :對注解進行解釋
 * 注解的作用
 * 1.可以解釋程序含義
 * 2.被其他程序使用
 * 注解的格式:
 * "@注解名" 還可以加參數值 
 * 比如
 * @SuppressWarnings(value="unchecked")
 * @Target  注解的作用范圍(可以修飾包,    類。接口,枚舉      方法   成員變量    局部變量    參數)
 * @Target(value={ElementType.METHOD,ElementType.TYPE})
 * 可以看源文件  TYPE類型里面是枚舉類型 里面 有 類 包  成員變量 局部變量 等等類型 可以理解為全部類型
 * @Retention(RetentionPolicy.RUNTIME)自定義一般都選 runtime 
 * @Retention 保留  三個 范圍  source源文件  class字節碼文件 一般變壓器用前面2個                     runtime 運行時(通過反射讀取)一般自定義用它
 * 
 * 注解在哪使用?
 * 可以在package,class,mthod,field等 相等於加了輔助信息   我們可以通過反射機制實現對這些元數據的訪問
 * 
 * @author Administrator
 *
 */
@Target(value={ElementType.METHOD,ElementType.TYPE})
//可以看源文件  ElementType.METHOD方法    ElementType.TYPE型里面是枚舉類型 里面 有 類 包  成員變量 局部變量 等等類型 可以理解為全部類型
@Retention(RetentionPolicy.RUNTIME)
//自定義注解一般都選 runtime 
public @interface MyAnnotation01 {
    //參數信息  參數類型 參數名
    //注解元素必須要有值 可以設置 默認返回值
    String studentName() default "";
    int age() default 0;
    int id() default -1;//-1表示不存在
    
    
    String[]schools()default{"清華","北大"};
            
}
package com.bjsxt.annotation;
/**
 * 使用我們自定義的注解
 * @author Administrator
 *
 */
@MyAnnotation01
public class MyAnnotation01Test {
    @MyAnnotation01(age=19,studentName="老哥",id=1001,schools={"人大","北電"})
    public void test(){
        
    }
}

什么是ORM

package com.bjsxt.annotation.orm;
/**
 *  * ORM(Object Ralationship Mapping)
 * 關系型數據庫
 * 類和表結構對應 屬性和字段對應  對象和記錄對應
 * @author Administrator
 *
 */

@SxtTable("tb_student")
public class SxtStudent {
    
    @SxtField(columName="id",type="int",length=10)
    private int id;
    @SxtField(columName="sname",type="varchar",length=10)
    private String studentName;
    @SxtField(columName="age",type="int",length=3)
    private int age;
    
    
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getStudentName() {
        return studentName;
    }
    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}
package com.bjsxt.annotation.orm;
/**
 * 自定義注解table
 * 
 * 
 * ORM(Object Ralationship Mapping)
 * 關系型數據庫
 * 類和表結構對應 屬性和字段對應  對象和記錄對應
 * 
 * 1.定義注解
 * 2.在類中使用注解
 * 3.解析注解
 */
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(value={ElementType.TYPE})
//可以看源文件  ElementType.METHOD方法    ElementType.TYPE型里面是枚舉類型 里面 有 類 包  成員變量 局部變量 等等類型 可以理解為全部類型
@Retention(RetentionPolicy.RUNTIME)
//自定義注解一般都選 runtime 
public @interface SxtTable {
    String value();

}
package com.bjsxt.annotation.orm;
/**
 *  * ORM(Object Ralationship Mapping)
 * 關系型數據庫
 * 類和表結構對應 屬性和字段對應  對象和記錄對應
 * 
 * 自定義注解 
 * field屬性
 */

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

@Target(value={ElementType.FIELD})
//可以看源文件  ElementType.METHOD方法    ElementType.TYPE型里面是枚舉類型 里面 有 類 包  成員變量 局部變量 等等類型 可以理解為全部類型
@Retention(RetentionPolicy.RUNTIME)
//自定義注解一般都選 runtime 
public @interface SxtField {
    // 表的字段名
    String columName();
    String type();
    int length();

}
package com.bjsxt.annotation.orm;

import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.util.Iterator;


/**
 * 使用反射讀取注解的信息 模擬處理注解信息的流程
 * @author Administrator
 *
 * * ORM(Object Ralationship Mapping)
 * 關系型數據庫
 * 類和表結構對應 屬性和字段對應  對象和記錄對應
 */

public class Demo03 {
    public static void main(String[] args) {
        try {
            //獲得該包下這個類所有信息
            Class clazz=Class.forName("com.bjsxt.annotation.SxtStudent");
            //獲得該類的所有注解
            Annotation[]annotation = clazz.getAnnotations();
            
            for (Annotation a: annotation ) {
                System.out.println(a);
                
            }
            //獲取類的指定注解           根據注解名獲取注解
            SxtTable st =(SxtTable) clazz.getAnnotation(SxtTable.class);    
            
            System.out.println(st.value());
            //獲得類的屬性的注解
            Field f = clazz.getDeclaredField("studentName");
            SxtField sxtField = f.getAnnotation(SxtField.class);
            System.out.println(sxtField.columName()+"--"+sxtField.type()+"--"+sxtField.length());
            //跟着獲得的表名 字段信息 拼出DDl語句 然后,使用JDBC執行這個sql在數據庫 生成先關的表
        } catch (Exception e) {
            
            e.printStackTrace();
        }
        
        
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM