Java学习系列:package-info.java的作用

本文介绍了Java中package-info.java文件的作用,包括包级别注解、提供私有变量、以及用于JavaDoc的包注释。通过学习Spring-Kafka的源码,它展示了如何利用这些特性管理和组织代码。
摘要由CSDN通过智能技术生成


场景
学习spring-kafka开源源码的时候,发现每个目录都有一个package-info.java文件,查找其用法,并整理出来。

环境

 


正文
        介绍
                package-info.java是一个Java文件,可以放到任意Java源码包执行。不过里面的内容有特定的要求,其主要目的是为了提供包级别相关的操作,比如包级别的注解、注释及公共变量。

用途
一、提供包级别的注解
介绍
在对应的源码包提供包级别的注解

样例
创建包注解

@Target(ElementType.PACKAGE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestPkg {

}

在package-info.java添加注解

@TestPkg
package com.exercise.data_collection_error_info_transformation.component;

查看对应的包的注解

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

Deprecated注解的使用
如果一整个包都是过时的话,可以直接在package-info.java下面,添加注解@Deprecated,表示该源码包已过时。如图:

在这里插入图片描述

二、提供包级别的变量
介绍
如果想在包里面使用对应的变量,而不想让其他包使用,就可以将变量放到package-info.java下面,实现分包自用的理念。

 

样例
在package-info.java添加以下内容:

/**
 * 包类
 */
class PACKAGE_CLASS{
    public void test(){
    }
}

/**
 * 包常量
 */
class PACKAGE_CONST{
    public static final String TEST_01="TEST";
}

在包内的任意类调用包常量,未报错:

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

截图如下:

在这里插入图片描述

 


在包外的任意类调用包常量,提示报错:

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

截图如下:

在这里插入图片描述

 
三、提供包级别的注释
介绍
使用JavaDoc的时候,通过在package-info.java添加注释,生成JavaDoc实现对应包的注释说明。

样例
添加对应的包的注释

/**
 * 描述: Spring组件<br>
 *
 * @version v1.0
 */
@TestPkg
@Deprecated
package com.exercise.data_collection_error_info_transformation.component;

生成对应的JavaDoc文档,截图如下:

在这里插入图片描述

 

点击component的链接,截图如下:

在这里插入图片描述
总结
在学习开源源码的时候,看到package-info.java,不知道为什么,特意去找资料学习,并进行总结。当我们在学习开源源码的时候,可以学习到很多东西,也在不断地补充自己的知识盲区。不过,也要自己多记笔记,多问自己为什么,做到“知其所以然”,稳扎稳打。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值