Java/Spring项目的包开头为什么是com?

本文涉及的产品
.cn 域名,1个 12个月
简介: 本文介绍了 Maven 项目的初始结构,并详细解释了 Java 包命名惯例中的域名反转规则。通过域名反转(如 `com.example`),可以确保包名的唯一性,避免命名冲突,提高代码的可读性和逻辑分层。文章还讨论了域名反转的好处,包括避免命名冲突、全球唯一性、提高代码可读性和逻辑分层。最后,作者提出了一个关于包名的问题,引发读者思考。
  • 下面是一个使用Maven构建的项目初始结构

lua

代码解读

复制代码

src/
  main/
    java/         --> Java 源代码
     com.example/ --->为什么这里是com开头
    resources/    --> 资源文件 (配置、静态文件等)
  test/
    java/         --> 测试代码
    resources/    --> 测试资源文件

通过具体的例子理解

  • com.ruoyi或许不好理解,那你反转一下 ruoyi.com 这下是不是就好理解了?ruoyi.com 不就成了若依的官网了吗(注:若依官网是ruoyi.vip,因为com是商业组织的结尾,所以若依域名不是ruoyi.com)!
  • 这个叫域名反转功能,通过域名反转,你可以很快捷的明白生产公司在哪里
  • 域名反转规则是 Java 中的包命名惯例,它的核心思想是使用公司的域名反转(比如 com.example)作为包的前缀来确保包名的唯一性。这个规则来源于防止不同公司或组织开发的项目之间发生命名冲突。

markdown

代码解读

复制代码

- 域名:`example.com`
- 包名:`com.example`

为什么反转而不是直接使用域名?

域名反转的原因主要是因为包名的标准书写方式:包名从最顶层到最具体的层次结构依次递增。在域名反转规则中:

  • com 是顶层包,表示这是一个商业(commercial)域名。
  • example 是次级包,代表公司的名称或组织名称。
  • 后续的包名逐渐细化,表示项目、模块或者功能。

这么做的好处

1. 避免命名冲

  • 如果所有人都使用类似的简单包名(如 utilsservice),那么当多个项目被集成到一起时,可能会发生命名冲突,导致编译错误或者功能异常。通过使用域名反转(如 com.example.utilsorg.somecompany.utils),每个公司的包名都是唯一的,即使包的功能相似,也不会产生冲突。

  • 这点其实很多小伙伴都有体会,随着代码开发水平的提高,使用轮子是一个常见的事,但轮子用多了,就能发现自己项目中充斥这一堆相同的东西--来自不同轮子。

2. 全球唯一

公司拥有独特的域名,反转后的包名前缀自然是唯一的。每个公司都可以根据自己的域名创建不重复的包结构,确保包在全世界范围内的唯一性。例如:

  • com.google.android
  • com.microsoft.azure

3. 提高代码的可读性

通过包名,开发者可以立即知道某个代码片段来自哪个公司或者项目。比如 com.example.project 可以立即指出代码来自 example.com,而 org.apache.commons 则来自 Apache 的项目。

4. 逻辑分层

域名反转后,包名可以继续向下扩展,用来表示不同的模块或功能。例如:

  • com.example.app.controller:example公司的app的控制器层代码
  • com.example.app.service:example公司的app的业务逻辑层代码
  • com.example.app.model:example公司的app的数据模型

总结与问题

  • 这个包名,从诞生开始就考虑到了很多东西(发布唯一性、代码可读性等)。看到包名,你也就知道很多信息啦。
  • 最后,留下一个问题,如果我的网址叫qiuner.top 那包名能不能叫top.qiuner


原文地址:https://juejin.cn/post/7416908856867520550

相关文章
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
71 2
|
12天前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
73 26
|
21天前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
38 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
24天前
|
XML Java 测试技术
从零开始学 Maven:简化 Java 项目的构建与管理
Maven 是一个由 Apache 软件基金会开发的项目管理和构建自动化工具。它主要用在 Java 项目中,但也可以用于其他类型的项目。
36 1
从零开始学 Maven:简化 Java 项目的构建与管理
|
23天前
|
Java
Java项目中高精度数值计算:为何BigDecimal优于Double
在Java项目开发中,涉及金额计算、面积计算等高精度数值操作时,应选择 `BigDecimal` 而非 `Double`。`BigDecimal` 提供任意精度的小数运算、多种舍入模式和良好的可读性,确保计算结果的准确性和可靠性。例如,在金额计算中,`BigDecimal` 可以精确到小数点后两位,而 `Double` 可能因精度问题导致结果不准确。
|
1月前
|
Java Android开发
Eclipse 创建 Java 项目
Eclipse 创建 Java 项目
40 4
|
1月前
|
Java Android开发
Eclipse 创建 Java 包
Eclipse 创建 Java 包
31 1
|
1月前
|
Java Kotlin 索引
学习Spring框架特性及jiar包下载
Spring 5作为最新版本,更新了JDK基线至8,修订了核心框架,增强了反射和接口功能,支持响应式编程及Kotlin语言,引入了函数式Web框架,并提升了测试功能。Spring框架可在其官网下载,包括文档、jar包和XML Schema文档,适用于Java SE和Java EE项目。
32 0
|
1月前
|
Java 数据库连接 API
Spring 框架的介绍(Java EE 学习笔记02)
Spring是一个由Rod Johnson开发的轻量级Java SE/EE一站式开源框架,旨在解决Java EE应用中的多种问题。它采用非侵入式设计,通过IoC和AOP技术简化了Java应用的开发流程,降低了组件间的耦合度,支持事务管理和多种框架的无缝集成,极大提升了开发效率和代码质量。Spring 5引入了响应式编程等新特性,进一步增强了框架的功能性和灵活性。
47 0
|
7天前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
37 6
下一篇
DataWorks