java註解介紹和自訂註解執行個體

來源:互聯網
上載者:User

JDK1.5引入了註解。 按來源分類:
內建註解
第三方註解
自訂註解

內建註解:例如Override,Deprecated,Suppvisewarnnings。
Override是來標識重寫的,如果沒有重寫,就會報錯。
Deprecated是用來標識過時的方法,如果使用的話會有風險提示,並劃橫線,使用Suppvisewarnnings就可確認使用,消除風險提示。

第三方註解:例如Spring當中的Autowired,Service,Resource,Repository.Mybatis當中的InsertProvider,Updateprovider,Options等等。

自訂註解:public @interface [註解名]. 按運行機制分類:
源碼註解
編譯時間註解
運行時註解

源碼註解:在源碼的時候存在,編譯成class檔案則消失
編譯時間註解:源碼存在,編譯成class檔案也存在
運行時註解:要對程式運行有作用,例如Autowired註解就可以自動裝配執行個體。 自訂註解執行個體:

/**@author:micro_hz2015年8月21日 *///Target目標,定義註解起作用的範圍,這裡定義了Method和類上的作用@Target({ElementType.METHOD,ElementType.TYPE})//註解可以繼承@Inherited//註解註解的運行機制@Retention(RetentionPolicy.RUNTIME)//註解產生文檔時候保留註解@Documentedpublic @interface Description {    //如果只有一個註解,必須是value,這個時候使用註解的的時候不用寫參數value名和"=",直接寫內容Description("")    String value();}
我們在普通的類中使用該自訂註解
package annotation.test;/**@author:micro_hz2015年8月21日 *///在類上使用了我們自訂的註解@Description("this is a class Annotation")public class AnnotationTest {    //在方法上使用我們自訂的註解    @Description("this is a method Annotation")    @Deprecated//使用該註解表示該方法已經過時    public void deprecatedMethod()    {        System.out.println("i am a Deprecated Annotation method");    }    public void p()    {        System.out.println("this is a AnnotationTest class");    }}
import java.lang.annotation.Annotation;import java.lang.reflect.Method;/**@author:micro_hz2015年8月21日 */public class Test {    @SuppressWarnings("deprecation")    public static void main(String args[])    {        //若使用Deprecated註解的方法,會警告,添加SuppressWarnnings即可確認使用,消除風險        AnnotationTest annotationTest = new AnnotationTest();        annotationTest.deprecatedMethod();        try {            //獲得類上的註解內容            //使用類載入得到這個類            Class<?> c = Class.forName("annotation.test.AnnotationTest");            //判斷這個類是否存在Description這個註解            if(c.isAnnotationPresent(Description.class))            {                //若存在即列印出來這個類的value註解值                Description d = (Description) c.getAnnotation(Description.class);                System.out.println(d.value());            }            //獲得方法上的註解內容            /*             * 方法1             */            //獲得所有的方法            Method[] methods = c.getMethods();            //遍曆所有的方法            for(Method m : methods)            {                //獲得每個方法的所有註解                Annotation[] as = m.getAnnotations();                //遍曆每個註解                for(Annotation a : as)                {                    //如果註解為Description類型,列印出value                    if(a instanceof Description)                    {                        System.out.println(((Description) a).value());                    }                }            }            /*             * 方法2             */            for(Method m : methods)            {                //判斷方法是否有該註解,有就列印出該註解的value                if(m.isAnnotationPresent(Description.class))                {                    System.out.println(((Description)m.getAnnotation(Description.class)).value());                }            }        } catch (ClassNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

運行結果:

i am a Deprecated Annotation methodthis is a class Annotationthis is a method Annotationthis is a method Annotation
工程目錄

慕課網註解教程
元註解範圍:

繼承是繼承類上的註解,不繼承方法上的註解。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.