1

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

 1 year ago
source link: https://blog.51cto.com/fengyege/5913055
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

精选 原创

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

spring-boot

2.1.8.RELEASE

spring-kafka

2.2.8.RELEASE

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的作用_package-info_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的作用_package-info_03

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

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

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

求赞、关注

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

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

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

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

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

Java学习系列:package-info.java的作用_package-info_06
Java学习系列:package-info.java的作用_学习系列_07
  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK