Spring Boot代码结构

2023-11-01

14. 组织你的代码

Spring Boot不需要使用任何特殊的代码结构,然而,这里有一些有用的最佳实践。

14.1. 使用"default"包

当类没有包含package声明时,它被认为处于default package下。通常不推荐使用default package,并应该避免使用它。因为对于使用@ComponentScan@EntityScan@SpringBootApplication注解的Spring Boot应用来说,来自每个jar的类都会被读取,这会造成一定的问题。

:我们建议你遵循Java推荐的包命名规范,使用一个反转的域名(例如com.example.project)。

14.2. 定位main应用类

我们通常建议你将main应用类放在位于其他类上面的根包(root package)中。通常使用@EnableAutoConfiguration注解你的main类,并且暗地里为某些项定义了一个基础“search package”。例如,如果你正在编写一个JPA应用,被@EnableAutoConfiguration注解的类所在包将被用来搜索@Entity项。

使用根包允许你使用@ComponentScan注解而不需要定义一个basePackage属性。如果main类位于根包中,你也可以使用@SpringBootApplication注解。

下面是一个典型的结构:

com
 +- example
     +- myproject
         +- Application.java
         |
         +- domain
         |   +- Customer.java
         |   +- CustomerRepository.java
         |
         +- service
         |   +- CustomerService.java
         |
         +- web
             +- CustomerController.java

Application.java文件将声明main方法,还有基本的@Configuration

package com.example.myproject;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

15. 配置类

Spring Boot提倡基于Java的配置。尽管你可以使用一个XML源来调用SpringApplication.run(),我们通常建议你使用@Configuration类作为主要源。一般定义main方法的类也是主要@Configuration的一个很好候选。

:很多使用XML配置的Spring配置示例已经被发布到网络上。你应该总是尽可能的使用基于Java的配置。搜索查看enable*注解就是一个好的开端。

15.1. 导入其他配置类

你不需要将所有的@Configuration放进一个单独的类。@Import注解可以用来导入其他配置类。另外,你也可以使用@ComponentScan注解自动收集所有的Spring组件,包括@Configuration类。

15.2. 导入XML配置

如果你绝对需要使用基于XML的配置,我们建议你仍旧从一个@Configuration类开始。你可以使用附加的@ImportResource注解加载XML配置文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot代码结构 的相关文章

  • 在 Postgres 中为特定查询设置 work_mem

    我正在使用一个委托给 JDBC 驱动程序的库PostgreSQL 而且有些查询非常复杂 需要更多内存 我不想设置work mem对于所有查询来说都是大的 只是这个子集 问题是执行以下代码会导致错误 pseudo code for what
  • 为什么从 Eclipse 导出的可运行 JAR 不起作用?

    我有一个在 Eclipse 中运行良好的项目 但是 当我将其导出到可运行的 JAR 其中包含依赖项 时 它不会运行 从控制台运行 JAR 时出现的错误是 编辑 之前没有使用 jar 运行它 INFO Loading XML bean def
  • 使用 IntentService 使用 Camera2 拍照

    我正在尝试创建一个可以拍照但不显示预览的应用程序 使用本教程 https www youtube com watch v oPu42I0HSi4 https www youtube com watch v oPu42I0HSi4如果我使用和
  • 从 java.util.TimeZone 转换为 org.joda.DateTimeZone

    在Java中如何将一个实例转换为java util TimeZone to org joda DateTimeZone并保持夏令时 Joda Time 处于维护模式 The 乔达时间 http www joda org joda time
  • 在 Java 中停止线程? [复制]

    这个问题在这里已经有答案了 我正在编写一段代码 该代码连接到服务器 使用该连接生成一堆线程并执行一堆 东西 在某些情况下 连接会失败 我需要停止一切并从头开始使用新对象 我想在对象之后进行清理 但在线程上调用 thread stop 但此方
  • 如何知道 Solr Optimize 何时完成?

    我正在使用 Solr php client 通过 php 与 Solr 进行通信 这段代码触发solr优化命令 solr gt optimize 请问有没有什么方法可以确定优化完成了 这都是因为我的网站上有一个管理页面 我每天必须手动优化
  • Spring 在 AuthenticationSuccessHandler 中自动装配会话范围 bean 不起作用

    我正在使用 spring security 我想初始化一个对象User在用户成功登录后的会话中 安全配置如下 Configuration EnableWebSecurity PropertySource classpath configs
  • 测试正确的时区处理

    我们正在处理大量数据 所有数据均以 UTC Java 语言 标记 在读取这些数据 将其存储在数据库中以及再次将其取出之间 发生了一些数据在夏令时期间关闭一小时的情况 由于 UTC 没有夏令时的概念 这显然是软件中的一个错误 一旦知道 就很容
  • IntelliJ 对于 Java 项目使用的默认构建过程是什么?

    直接从 IntelliJ 中的 IDE 构建 Java 项目非常好 它速度很快 而且很有效 我无法找到任何有关 IntelliJ 如何进行这些默认构建的文档 我猜它使用Ant 我想做的是为下载我的项目的任何人自动化这个快速 轻松的构建过程
  • 为什么我用Java计算的结果是错误的?

    我使用这段代码来计算一些东西 但几乎在所有情况下结果都是 0 0 为什么 编译器中没有警告或错误 private void jButton1ActionPerformed java awt event ActionEvent evt try
  • 将带有 md5 消息摘要和 DESede/CBC/PKCS5Padding 的 3DES 加密的 java 代码转换为 python

    我有这个工作java代码 它使用3DES加密对密码进行加密 import java security MessageDigest import java util Arrays import java util Base64 import
  • 如何在 Spring Data REST 中使用 spring.data.rest.enable-enum-translation

    我正在使用 Spring Boot 1 5 3 Spring Data REST HATEOAS Hibernate 在我的模型中 有时我使用枚举 例如 public enum Roles ROLE ADMIN ROLE USER ROLE
  • 公交车公共交通算法

    我正在开发一个可以查找公交路线的离线 C 应用程序 我可以提取时间表 巴士 路线数据 我正在寻找适用于基本数据的最简单的解决方案 可以使用什么算法来查找从巴士站 A 到巴士站 B 的路线 是否有适用于 C Java 的开源解决方案 数据库的
  • 如何删除 Spring 的 RestTemplate 添加的某些 HTTP 标头?

    我在远程服务方面遇到问题 我无法控制对使用 Spring 的 RestTemplate 发送的请求进行 HTTP 400 响应 使用发送的请求curl但被接受了 所以我将它们与通过 RestTemplate 发送的内容进行了比较 特别是 S
  • 选择活动时运行时崩溃

    首先我想说我几乎没有 Android 经验 这是我在 Android 中的第一个项目 而且我的老师不太擅长教学 所以我对任何过度的无知表示歉意 在进一步讨论之前先解释一下 我的应用程序的目标本质上是能够记录您在某些活动上花费了多少时间 记录
  • 如果使用 Maven,是否应该忽略 VCS 中 Eclipse 特定的文件?

    我知道为什么不将 Eclipse IDE 特定的文件提交到像 Git 我实际上正在使用的 这样的 VCS 中 这就是我使用 Maven 并让它为您生成这些文件的原因之一not将它们置于版本控制之下 但我想知道 是否应该在 gitignore
  • spring 中的事件监听器被调用两次

    我在我的 Web 应用程序中遇到了 Spring 事件监听器的问题 任何立即帮助将不胜感激 如果我有循环依赖 事件监听器会注册并调用两次 我有服务类 它在另一个方法上有 transaction 注释 Service PBSTaskServi
  • 是否可以从外部闪存驱动器运行 java (jdk-windows)、Eclipse (indigo) 和 Android-sdk 进行 Android 应用程序开发

    我想知道我们是否可以通过在外部闪存驱动器上保存所需的软件来在我们使用的任何计算机上开发我们的android应用程序 我的意思是在闪存驱动器上安装java eclipse和android sdk 所以最后我们可以将闪存带到任何地方计算机并在任
  • 如何在 Hibernate 中使用 SELECT 进行 INSERT

    我需要在休眠中实现以下请求 insert into my table max column values select max id from special table where 如何在休眠中使用注释来做到这一点 Special tab
  • 应用服务器如何注入私有字段?

    我看到这个问题 注入私有 包或公共字段或提供 setter https stackoverflow com questions 2021716 inject into private package or public field or p

随机推荐

  • 解决Ubuntu18无法进入-显示/dev/nvme0n1p8:recovering Journal

    一 操作环境 联想小新pro13 ubuntu18双系统 二 前情提要 联想小新pro13安装ubuntu18双系统后出现分辨率问题 字体非常小 今天安装的navicat软件界面文字太小 询问老师后说是分辨率问题 便想着修改分辨率 然后在某
  • sin傅里叶变换公式_复变函数题,,求f(t)=sintcost的傅里叶变换

    展开全部 sintcost 1 2sin2t F 1 2sin2t 1 2sin2t e jwt dt 用欧拉公62616964757a686964616fe4b893e5b19e31333431353330式可得原式 1 2 j 2 e
  • Apriori算法详解之【二、伪代码和例子】

    上一篇文章中对Apriori算法进行了简单的描述 Apriori算法详解之 一 相关概念和核心步骤 http blog csdn net lizhengnanhua article details 9061755 现在用伪代码实现 及对经典
  • LeetCode 700. 二叉搜索树中的搜索

    给定二叉搜索树 BST 的根节点 root 和一个整数值 val 你需要在 BST 中找到节点值等于 val 的节点 返回以该节点为根的子树 如果节点不存在 则返回 null 示例 1 输入 root 4 2 7 1 3 val 2 输出
  • Android菜单创建和使用

    Menu分类 1 选项菜单 OptionMenu 选项菜单是一个应用的主菜单项 用于放置对应用产生全局影响的操作 创建菜单 右键res gt New gt Android Resource Directory gt Resource typ
  • GridLayoutManager这么用,你可能还真没尝试过

    前言 Android学习PDF 架构视频 面试文档 源码笔记 阅读本文之前 你需要的一些知识储备 对View的绘制流程有一些简单的了解 Canvas的简单实用 RecyclerView GridLayoutManager的使用 目录 外链图
  • git vscode使用Gitlens

    1 与仓库建立连接 点击remotes的加号 gt 输入仓库名称 gt 输入仓库https或ssh https设置免密登录 2 将本地文件夹推送到远程服务器 点击云 3 拉取远程服务器的同步代码 和上图一样 不过云变成了加载按钮
  • ubuntu 安装qq

    先装deepin sudo apt get install y build essential git cd git clone https github com wszqkzqk deepin wine ubuntu git cd dee
  • java POI导出excel画斜线

    想要实现这样的效果 1 HSSF画斜线 wps可打开 office老版本可打开 Workbook workbook new HSSFWorkbook Sheet sheet workbook createSheet sheetName sh
  • 修改编码为gb2312

    1 MySQL输入命令 show variables like char 出现 ERROR 2006 HY000 MySQL server has gone away No connection Trying to reconnect Co
  • c++ - 第25节 - STL之空间配置器

    目录 1 什么是空间配置器 2 为什么需要空间配置器 3 SGI STL空间配置器实现原理 4 STL空间配置器的使用 1 什么是空间配置器 空间配置器 顾名思义就是 为各个容器高效的管理空间 空间的申请与回收 在默默地工作 虽然在常规使用
  • 无webshell的UDF提权

    1 导入udf提权 因为已经是mysql的root了 所以肯定考虑用udf直接提权 现在本地虚拟机测试成功了再跑去测试目标机器 这样子安全点 首先在虚拟机搭建wamp环境 用手里的一个可以执行成功的udf提权的网马 将dll文件导入到win
  • FPGA Altera相关软件基本用法

    Quartus II 13 1 基本用法 1 配置 1 Assignments gt Device 配置FPGA主芯片 Unused pins 输入三态 Dual Purpose Pins 设置为IO口 2 PIN Planner对需要的p
  • 机器学习和人工智能方法在CADD中的应用

    综述 众所周知 由于疾病的生物学复杂性 药物研发是一个风险高 周期长的过程 为了快速高效地设计和开发新药 将计算机模拟技术引进研发的各个阶段 形成了目前药物研发领域不可或缺的手段 计算机辅助药物设计 CADD 近年来 使用大数据和人工智能算
  • android 多产品项目搭建与变体的使用

    由于公司产品的复杂性 连带着项目也跟着复杂起来 这时候也接触到了android的build 变体的使用 在这里记录一下这个过程 最初查看关于这一块的资料是在android的官网上看得 地址如下 配置 build 变体 Android 开发者
  • 什么是事件循环 Event Loop

    一 什么是事件循环 事件循环 Event Loop 是单线程的JavaScript在处理异步事件时进行的一种循环过程 具体来讲 对于异步事件它会先加入到事件队列中挂起 等主线程空闲时会去执行事件队列 Event Queue 中的事件 如此反
  • 【不忘初心】Windows11 22000.194 RTM X64 四合一[纯净精简版][2.59G](2021.10.11)

    此版可正常更新补丁 WIN11全新的UI界面出炉 可以说这一次Windows 11全新升级 无论是从Logo上还是UI界面设计 都有很大的变化 母版来自MSDN WIN11 22000 194 为了保证稳定初心的系统全部都是离线精简和优化
  • Matlab:绘制正弦曲线与余弦曲线

    Matlab 绘制正弦曲线与余弦曲线 目录 绘制正弦曲线与余弦曲线 结果显示 实现代码 绘制正弦曲线与余弦曲线 结果显示 实现代码 清空窗口 clear 清空工作区 clc 清空命令行窗口 绘制sin函数 一个区间 x 2 pi 0 1 2
  • Minio大文件上传、文件秒传、断点续传

    初步流程 选择上传文件 gt 提取md5 gt 请求后端校验此md5的文件是否已经上传过 gt 如果有上传就返回信息告诉前端上传完成 秒传 gt 如果没有则根据此md5获取已上传的分片有哪些 未上传的分片有多少个就返回多少个上传url 如何
  • Spring Boot代码结构

    14 组织你的代码 Spring Boot不需要使用任何特殊的代码结构 然而 这里有一些有用的最佳实践 14 1 使用 default 包 当类没有包含package声明时 它被认为处于default package下 通常不推荐使用def