java自定義注解


Java注解

  Annotation(注解)是JDK5.0及以后版本引入的。它可以用於創建文檔,跟蹤代碼中的依賴性,甚至執行基本編譯時檢查。注解是以‘@注解名’在代碼中存在的,根據注解參數的個數,我們可以將注解分為:標記注解、單值注解、完整注解三類。它們都不會直接影響到程序的語義,只是作為注解(標識)存在,我們可以通過反射機制編程實現對這些元數據(用來描述數據的數據)的訪問。另外,你可以在編譯時選擇代碼里的注解是否只存在於源代碼級,或者它也能在class文件中出現。

在寫代碼過程常遇到的注解有@Override、@SuppressWarnings,@Override注解表示重寫父類方法,、@SuppressWarnings注解表示忽略警告信息

關於四個作用相同注解
     @Component("info")   不分層
     @Repository("info")  dao
     @Service("info")     biz
     @Controller("info")  action

     @Value()    在一個類中注入普通屬性值

     @Resource   在一個類中注入域屬性

     @Autowired  在一個類中注入域屬性

注解(Annotation)自定義注解入門

元注解的作用就是負責注解其他注解。Java5.0定義了4個標准的meta-annotation類型,它們被用來提供對其它 annotation類型作說明。Java5.0定義的元注解:
    1.@Target,
    2.@Retention,
    3.@Documented,
    4.@Inherited

  這些類型和它們所支持的類在java.lang.annotation包中可以找到。下面我們看一下每個元注解的作用和相應分參數的使用說明。

@Target:

   @Target說明了Annotation所修飾的對象范圍:Annotation可被用於 packages、types(類、接口、枚舉、Annotation類型)、類型成員(方法、構造方法、成員變量、枚舉值)、方法參數和本地變量(如循環變量、catch參數)。在Annotation類型的聲明中使用了target可更加明晰其修飾的目標。

作用:用於描述注解的使用范圍(即:被描述的注解可以用在什么地方)

  取值(ElementType)有:

    1.CONSTRUCTOR:用於描述構造器
    2.FIELD:用於描述域
    3.LOCAL_VARIABLE:用於描述局部變量
    4.METHOD:用於描述方法
    5.PACKAGE:用於描述包
    6.PARAMETER:用於描述參數
    7.TYPE:用於描述類、接口(包括注解類型) 或enum聲明

使用@interface自定義注解時,自動繼承了java.lang.annotation.Annotation接口,由編譯程序自動完成其他細節。在定義注解時,不能繼承其他的注解或接口。@interface用來聲明一個注解,其中的每一個方法實際上是聲明了一個配置參數。方法的名稱就是參數的名稱,返回值類型就是參數的類型(返回值類型只能是基本類型、Class、String、enum)。可以通過default來聲明參數的默認值。

  定義注解格式:
  public @interface 注解名 {定義體}

  注解參數的可支持數據類型:

    1.所有基本數據類型(int,float,boolean,byte,double,char,long,short)
    2.String類型
    3.Class類型
    4.enum類型
    5.Annotation類型
    6.以上所有類型的數組

自定義注解案例:

1.自定義注解

復制代碼
1 @Target(ElementType.METHOD)
2 @Retention(RetentionPolicy.RUNTIME)
3 @Documented
4 public @interface Apple {
5     String name();
6     String sex() default "男";
7     String phone() default "15931787945";
8     int age() default 2;
9 }
復制代碼

2.使用注解的類:

1 public class AppleTest {
2     @Apple(name="張朵朵")
3   public void show(){
4 
5     }
6 }

3.提取注解參數:

復制代碼
 1 public class Test20171010{
 2    @Test
 3     public void test01(){
 4         Class<AppleTest> appleTestClass = AppleTest.class;
 5         try {
 6             Apple show = appleTestClass.getMethod("show").getAnnotation(Apple.class);
 7             System.out.println(show.name());
 8             System.out.println(show.sex());
 9             System.out.println(show.phone());
10             System.out.println(show.age());
11         } catch (NoSuchMethodException e) {
12             e.printStackTrace();
13         }
14     }
15 }
復制代碼

執行結果:


免責聲明!

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



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