场景

学习​​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 {

}
  1. 在​​package-info.java​​添加注解
@TestPkg
package com.exercise.data_collection_error_info_transformation.component;
  1. 查看对应的包的注解
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
  1. 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";
}
  1. 在包内的任意类调用包常量,未报错:
public class Client {
public static void main(String[] args) throws ClassNotFoundException {
System.out.println(PACKAGE_CONST.TEST_01);
}
}

截图如下:

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

  1. 在包外的任意类调用包常量,提示报错:
public class Client {
public static void main(String[] args) throws ClassNotFoundException {
System.out.println(PACKAGE_CONST.TEST_01);
}
}

截图如下:

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

三、提供包级别的注释

介绍

使用​​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​​​文档,截图如下:

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

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

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

总结

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


求赞、关注

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


如果我的文章对大家产生了帮忙,可以在文章底部点个赞或者收藏;

如果有好的讨论,可以留言;

如果想继续查看我以后的文章,可以点击关注

也可以扫描以下二维码,关注我的公众号:枫夜之求索阁,查看我最新的分享!

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


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