在浏览 Spring 框架源码的时候,还有没有印象,在每个 package 上面都会有一个 package-info.java 文件?如果没印象的话,能够再去瞅两眼,关上看看外面都有啥。那么这个文件是干什么用的?上面简略来聊聊!微信搜寻公众号:“ 菜鸟封神记 ”,抉择适宜本人的各种学习材料!继续分享一线大厂罕用技术干货。
一、介绍
package-info.java 首先是一个 java 源码文件,这个源码文件能够放到任意的 java 源码包外面。然而它不能通过创立一般 java 类的形式去创立,因为它的文件名字里有个 ’-‘,不合乎 java 的变量命名标准。然而一些开发工具,例如罕用的 IDEA 提供了间接创立 package-info.java 类的办法,能够去试试。
对于这个类,它的内容通常很简略,然而也有肯定的标准,次要的作用是提供一些包级别的操作,例如: 包级别的正文、包级别的注解、包级别的公共变量 。
二、应用形式
2.1、提供包级别的正文
在应用 JavaDoc 生成 Java 正文文档时,通常写在 package-info.java 下面的正文说明会被生成到文档中。例如 spring 源码中 spring-beans 模块中的 org.springframework.beans 包下的 package-info.java 文件,内容如下:
/**
* This package contains interfaces and classes for manipulating Java beans.
* It is used by most other Spring packages.
*/
@NonNullApi
@NonNullFields
package org.springframework.beans;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;
来看看对应的 javadoc 中的内容:链接:https://docs.spring.io/spring…
这种形式能够对一整个包的性能做一个简要阐明。
2.2、包级别的注解
spring 源码中,也有很多包级别的注解,然而注解好多都是嵌套格局的,比较复杂。简略举个例子,假如咱们给他人提供了一个 sdk,其中有一个包下的所有接口都须要降级,老的必定不能间接删掉,只能先标注过期,那咱们怎么标注呢?依照老的形式,一个类一个类标注。
那么有了包级别的注解之后,咱们间接在这个包上面的 package-info.java 中标注这个注解,这个包中的所有 class 就都会被标注为过期,如下:
这样做之后,生成 javadoc 文档之后,能够在 javadoc 中看到整个包的一个状况。
2.3、包级别的公共变量
如果想在某一个包外面提供一些只有这个包上面能够应用的常量或者类,其余包不能应用。能够间接通过 package-info.java 实现。
示例代码
package-info.java
/**
* @author wangbing
*/
package com.wb.spring.testpkg;
/**
* @author wangbing
* 包级别的类
*/
class PckInner {
}
/**
* @author wangbing
* 包级别的常量
*/
class PckInnerConstant {public static final String MY_CONSTANT = "My_Constant";}
同一个包下的 Test1.java
/**
* @author wangbing
*/
public class Test1 {public static void main(String[] args) {
// 能够失常援用到
PckInner inner = new PckInner();
String myConstant = PckInnerConstant.MY_CONSTANT;
}
}
其余包下的 Test2.java
在看一些其余源码的时候,你会发现也有很多 package-info.java 文件,这个文件作用虽没有那么简单,然而毕竟学习嘛,多懂一点始终还是没有害处的!
Spring 源码类文章列表:https://segmentfault.com/a/11…