Java學習系列:package-info.java的作用

場景

學習spring-kafka開源源碼的時候,發現每個目錄都有一個package-info.java文件,查找其用法,並整理出來。

環境

軟件 版本
spring-boot 2.1.8.RELEASE
spring-kafka 2.2.8.RELEASE
JDK 8
intellij idea 2019.1

正文

介紹

package-info.java是一個Java文件,可以放到任意Java源碼包執行。不過裏面的內容有特定的要求,其主要目的是爲了提供包級別相關的操作,比如包級別的註解、註釋及公共變量。

用途

一、提供包級別的註解

介紹

在對應的源碼包提供包級別的註解

樣例

  1. 創建包註解

    @Target(ElementType.PACKAGE)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface TestPkg {
    
    }
    
  2. package-info.java添加註解

    @TestPkg
    package com.exercise.data_collection_error_info_transformation.component;
    
  3. 查看對應的包的註解

    public class Client {
        public static void main(String[] args) throws ClassNotFoundException {
        	// 查看包註解
            String pkgName = "com.exercise.data_collection_error_info_transformation.component";
            Package pkg = Package.getPackage(pkgName);
            Annotation[] annotations = pkg.getAnnotations();
            for(Annotation an:annotations){
                if(an instanceof TestPkg){
                    System.out.println("Hi,I'm the TestPkg");
    
                }
            }
    
    		// 查看包下面對應的類的註解
            Class test = Class.forName("com.exercise.data_collection_error_info_transformation.component.Test");
            Annotation[] annotations2 = test.getAnnotations();
            for(Annotation an:annotations2){
                if(an instanceof TestPkg){
                    System.out.println("Hi,I'm the Class TestPkg");
                }
            }
        }
    }
    

    結果如下,只輸出對應的包的註解,包內部的類是沒有該註解的。

    Hi,I'm the TestPkg
    
  4. Deprecated註解的使用
    如果一整個包都是過時的話,可以直接在package-info.java下面,添加註解@Deprecated,表示該源碼包已過時。如圖:
    在這裏插入圖片描述

二、提供包級別的變量

介紹

如果想在包裏面使用對應的變量,而不想讓其他包使用,就可以將變量放到package-info.java下面,實現分包自用的理念。

樣例

  1. package-info.java添加以下內容:

    /**
     * 包類
     */
    class PACKAGE_CLASS{
        public void test(){
        }
    }
    
    /**
     * 包常量
     */
    class PACKAGE_CONST{
        public static final String TEST_01="TEST";
    }
    
  2. 在包內的任意類調用包常量,未報錯:

    public class Client {
        public static void main(String[] args) throws ClassNotFoundException {
            System.out.println(PACKAGE_CONST.TEST_01);
        }
    }
    

    截圖如下:
    在這裏插入圖片描述

  3. 在包外的任意類調用包常量,提示報錯:

    public class Client {
        public static void main(String[] args) throws ClassNotFoundException {
            System.out.println(PACKAGE_CONST.TEST_01);
        }
    }
    

    截圖如下:
    在這裏插入圖片描述

三、提供包級別的註釋

介紹

使用JavaDoc的時候,通過在package-info.java添加註釋,生成JavaDoc實現對應包的註釋說明。

樣例

  1. 添加對應的包的註釋

    /**
     * 描述: Spring組件<br>
     * 項目名稱: data_collection_error_info_transformation <br>
     * 創建時間: 2020/5/6 12:59 <br>
     * 公司信息: 凱通科技股份有限公司 產品研發中心-大數據產品<br>
     *
     * @version v1.0
     */
    @TestPkg
    @Deprecated
    package com.exercise.data_collection_error_info_transformation.component;
    
  2. 生成對應的JavaDoc文檔,截圖如下: 在這裏插入圖片描述
    點擊component的鏈接,截圖如下:
    在這裏插入圖片描述

總結

在學習開源源碼的時候,看到package-info.java,不知道爲什麼,特意去找資料學習,並進行總結。當我們在學習開源源碼的時候,可以學習到很多東西,也在不斷地補充自己的知識盲區。不過,也要自己多記筆記,多問自己爲什麼,做到“知其所以然”,穩紮穩打。

隨緣求贊

如果我的文章對大家產生了幫忙,可以在文章底部點個贊或者收藏;
如果有好的討論,可以留言;
如果想繼續查看我以後的文章,可以左上角點擊關注
拜拜

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章