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

简介: 本文介绍了 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

相关文章
|
13天前
|
前端开发 Java API
2025 年 Java 全栈从环境搭建到项目上线实操全流程指南:Java 全栈最新实操指南(2025 版)
本指南涵盖2025年Java全栈开发核心技术,从JDK 21环境搭建、Spring Boot 3.3实战、React前端集成到Docker容器化部署,结合最新特性与实操流程,助力构建高效企业级应用。
205 1
|
1月前
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
230 63
|
2月前
|
Java 关系型数据库 数据库连接
Spring Boot项目集成MyBatis Plus操作PostgreSQL全解析
集成 Spring Boot、PostgreSQL 和 MyBatis Plus 的步骤与 MyBatis 类似,只不过在 MyBatis Plus 中提供了更多的便利功能,如自动生成 SQL、分页查询、Wrapper 查询等。
179 3
|
2月前
|
安全 Java 测试技术
Java 大学期末实操项目在线图书管理系统开发实例及关键技术解析实操项目
本项目基于Spring Boot 3.0与Java 17,实现在线图书管理系统,涵盖CRUD操作、RESTful API、安全认证及单元测试,助力学生掌握现代Java开发核心技能。
93 1
|
2月前
|
Java 数据库连接 API
Java 8 + 特性及 Spring Boot 与 Hibernate 等最新技术的实操内容详解
本内容涵盖Java 8+核心语法、Spring Boot与Hibernate实操,按考试考点分类整理,含技术详解与代码示例,助力掌握最新Java技术与应用。
84 2
|
2月前
|
Java 测试技术 Spring
简单学Spring Boot | 博客项目的测试
本内容介绍了基于Spring Boot的博客项目测试实践,重点在于通过测试驱动开发(TDD)优化服务层代码,提升代码质量和功能可靠性。案例详细展示了如何为PostService类编写测试用例、运行测试并根据反馈优化功能代码,包括两次优化过程。通过TDD流程,确保每项功能经过严格验证,增强代码可维护性与系统稳定性。
112 0
|
2月前
|
存储 Java 数据库连接
简单学Spring Boot | 博客项目的三层架构重构
本案例通过采用三层架构(数据访问层、业务逻辑层、表现层)重构项目,解决了集中式开发导致的代码臃肿问题。各层职责清晰,结合依赖注入实现解耦,提升了系统的可维护性、可测试性和可扩展性,为后续接入真实数据库奠定基础。
196 0
|
2月前
|
安全 JavaScript Java
java Web 项目完整案例实操指南包含从搭建到部署的详细步骤及热门长尾关键词解析的实操指南
本项目为一个完整的JavaWeb应用案例,采用Spring Boot 3、Vue 3、MySQL、Redis等最新技术栈,涵盖前后端分离架构设计、RESTful API开发、JWT安全认证、Docker容器化部署等内容,适合掌握企业级Web项目全流程开发与部署。
110 0
|
2月前
|
人工智能 安全 Java
掌握Java反射:在项目中高效应用反射机制
Java反射是一种强大功能,允许程序在运行时动态获取类信息、创建对象、调用方法和访问字段,提升程序灵活性。它在框架开发、动态代理、注解处理等场景中广泛应用,如Spring和Hibernate。但反射也存在性能开销、安全风险和代码复杂性,应谨慎使用。
|
2月前
|
Java 应用服务中间件 Maven
第01课:Spring Boot开发环境搭建和项目启动
第01课:Spring Boot开发环境搭建和项目启动
441 0