在浏览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@NonNullFieldspackage 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...