详解 Java package-info.java

今天,再给同学讲 Java 项目分层时,想找一个文件,在其中详细说明每个包的作用,突然想到 package-info.java 文件,该文件我也只在开源项目中看过到,公司内的项目几乎没见过 😂

Java 开源项目中的 package-info.java 是干什么的呢? 有啥作用呢?小伙伴们,你们在实际的项目中,有写过该文件吗?

今天我们就谈一下该文件的作用和应用场景.

创建

先说一下如何创建该文件,像创建 java 类创建的话,IDEA 会提示报错. 

可以通过如下方式创建

包级别的文档

从 Java 5 开始,包级别的文档可以写到 package-info.java 文件中,格式为 javadoc,如下代码所示:

 

markdown

代码解读

复制代码

/** * 该包提供消息推送功能,包括如下服务: * <ul> * <li>MailService: 推送邮件</li> * <li>WeChatService: 推送企业微信消息</li> * </ul> * * @author Ran Mai * @version v1 2024/8/21 19:18 */ package com.acrops.furion.courier.service;

使用插件生成 javadoc 的文档,查看对应的包的文档,里面展示了包上的注释文档。

整理了一份核心面试笔记包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题

需要全套面试笔记的【点击此处即可】即可免费获取

包级别的注解

对于一些注解是作用在包级别上的,也就是写在 package-info.java中,比如非空判断 org.springframework.lang.NonNullFields

 

less

代码解读

复制代码

@NonNullApi @NonNullFields package com.acrops.furion.courier.service; import org.springframework.lang.NonNullApi; import org.springframework.lang.NonNullFields;

对应的声明为:

 

less

代码解读

复制代码

@Target(ElementType.PACKAGE) @Retention(RetentionPolicy.RUNTIME) @Documented @Nonnull @TypeQualifierDefault(ElementType.FIELD) public @interface NonNullFields { }

对应的注释描述为

A common Spring annotation to declare that fields are to be considered as non-nullable by default for a given package.
Should be used at package level in association with Nullable annotations at field level.

翻译:该包下面的字段(field)都是非空的,如果想为空,需要在字段上标记 @Nullable.

也就是包上面的注解,是对包中所有类/方法/字段生效的。

总结

package-info.java文件的核心功能,包括:

  • 包级别的文档,描述包的作用
  • 包级别的注解,可以应用到包下面的所有类
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值