SpringBoot — 初始创建项目小白教程

news2024/12/25 0:19:32

这里写目录标题

    • 前言
    • SpringBoot简介
      • 重要策略
      • Spring Boot 项目约定
    • IntelliJ IDEA 直接创建
    • Maven项目改造创建
    • 常见项目结构
      • 代码层
      • 资源文件结构
      • 主要文件说明
    • @SpringBootApplication 注解分析
    • 总结

前言

使用 Servlet/JSP 开发 JavaWeb 时,一个接口对应一个Servlet,配置很繁琐。未尽量减少这种麻烦,Spring Boot 应用而生。它是由 Pivotal 团队提供的全新框架,目的适用于简化 Spring 应用的初始搭建即开发过程。本文记录下创建步骤。

SpringBoot简介

重要策略

  • 开箱即用:Outofbox,指在开发过程中,通过在 Maven 项目的 pom 文件中添加相关依赖包,然后使用对应注解来代替繁琐的 XML 配置文件以管理对象的生命周期。这一特点使得开发人员摆脱了复杂的配置工作以及相关依赖的管理工作,更加专注于业务逻辑;
  • 约定优于配置:Convention over configuration,一种由 SpringBoot 本身来配置目标结构,由开发者在结构中添加信息的软件设计范式。这一特点虽然降低了部分灵活性,增加了 BUG 定位的复杂性,但减少了开发人员需要做出决定的数量,同时减少了大量 XML 配置,而且可以将代码编译、测试和打包等工作自动化;

Spring Boot 项目约定

  • 约定项目中有且只有一个入口类,其类名推荐使用:xxxApplication.java。而且该入口类必须位于所有的子包之外,其中必须存在一个用于启动项目的 main 函数。
    在这里插入图片描述

  • 此外, Spring Boot 项目约定必须在项目根目录中存在一个名为 application.yml 或者 application.prpperties 的配置文件,一般是位于 resources 目录下。

IntelliJ IDEA 直接创建

  1. 新建项目,选择Spring Initializr
    在这里插入图片描述
    选择 Web 依赖 和 Spring Boot 版本号,点击 Create:
    在这里插入图片描述
    至此就借助SpringBoot插件(有插件才有Spring Initializr的创建方式,如果没有该创建方式选项,先到Plugins中安装“Spring Boot”插件)完成了基本创建:
    在这里插入图片描述

Maven项目改造创建

1.新建一个Maven项目:
在2022.3.1的新版本中,创建一个普通项目,选中Maven做Bulid system 即可在这里插入图片描述
更多新版本创建Maven项目的方式可以参考2022版 的IDEA创建一个maven项目(超详细)。

创建好普通的Maven项目,做一些配置调整,在pom.xml文件中,需要添加SpringBoot的依赖。

专业详细的配置和解读请参考:

  • 英文:Developing Your First Spring Boot Application
  • 中文:开发你的第一个Spring Boot应用程序

编辑pom文件如下内容:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.utah</groupId>
    <artifactId>Maven2</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.2.6.RELEASE</version>
        </dependency>
    </dependencies>

</project>

然后创建启动类SpringBootApplication:目录结构见下图

package org.utah;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@EnableAutoConfiguration //开启自动配置
public class SpringBootApplication {

    @RequestMapping("/")
    String home() {
        return "Hello World!";
    }

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

以上@RequestMapping注解提供了 “routing” (路由)信息。 它告诉Spring,任何带有 / 路径的HTTP请求都应该被映射到 home 方法。@RestController注解告诉Spring将返回的结果字符串直接响应给客户端。

@RestController 和 @RequestMapping 注解是Spring MVC注解(它们不是Spring Boot特有的)。 详情见Spring参考文档中的 MVC部分。

然后执行这个main方法,得到下图显示输出:
在这里插入图片描述

访问 localhost:8080验证:
在这里插入图片描述
至此,用mave项目改造基本完成。

常见项目结构

网上看到的常见项目结构,这里记录借鉴下。

代码层

根目录:com.springboot:

  • build :工程启动类;
  • entity :实体类;
  • dao :数据访问层;
  • service :数据服务层,业务类代码;
  • controller :前端访问控制器;
  • config :配置信息类;
  • util :工具类;
  • constant :常用接口类;
  • vo:数据传输类;
  • Application.java:项目的启动类;

资源文件结构

根目录 src/main/resources:

  • config :.properties、.json 等配置文件;
  • i18n :国际化相关;
  • META-INF/spring :spring.xml ;
  • static :页面以及 js、css、image 等分别放在各自文件夹下;

主要文件说明

  • pom.xml文件:maven依赖关系文件。
  • SpringBootApplication.java:该文件内含main函数,用于启动应用程序。
    • main方法:它相当于程序的一个入口。通过调用run方法,将业务委托给springboot的SpringApplication类, SpringApplication将引导我们的应用,启动spring,继而启动被我们配置好的tomcat web服务器。
  • application.properties:一个空的properties文件,可根据需要配置属性。

@SpringBootApplication 注解分析

相关代码

package org.springframework.boot.autoconfigure;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
        @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
   ......
}

说明
@SpringBootApplication 标注该类是一个启动类,可以看做是 @Configuration、@EnableAutoConfiguration、@ComponentScan 的集合;

  • @Configuration :允许在上下文中注册额外的 Bean 或导入其他配置;
  • @EnableAutoConfiguration:启动 Spring Boot 的自动配置机制;
  • @ComponentScan:扫描被 @ComponentScan(@Service、@Controller、@Repository) 注解的 Bean,默认扫描该类所在包下所有类,将这些 Bean 定义加载到 IOC 容器中;

总结

文章主要介绍了两种创建 SpringBoot 的方式,一种是通过 借助IDEA中插件默认创建的方式,另一种则是通过Maven项目改造的方式,两个方式其实效果都是一样的,只不过形式不同而已。还有一种就是直接到 https://start.spring.io/ 来生成 Spring Boot 项目,将生成的压缩包下载导入到IDE中也行,形式大致和IDEA直接用插件方式创建类似。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/124248.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql分区之RANGE类型

目录 首先查看MySQL是否支持分区 在实际操作分区前我们得了解下分区的几点限制&#xff1a; RANGE分区实操 SQL如何查询分区数据 首先查看MySQL是否支持分区 show plugins; 当查询结果显示partition的状态为active则表示当前MySQL版本支持分区。分区方案一般有四种&#…

CVPR 2017|SfMLearner:单目视频中深度和姿态估计的无监督算法

&#x1f3c6;作者提出了一个单目相机的视频序列进行深度估计与运动估计&#xff0c;作者的方法是完全无监督的&#xff0c;端到端的学习&#xff0c;作者使用了单视角深度网络和多姿态网络&#xff0c;提出了一个图像&#xff08;predict&#xff09;与真实的下一帧&#xff0…

09---Vue使用路由

由于之前数据、主页全部放在Home.vue中&#xff0c;不能够实现复用&#xff0c;于是&#xff0c;现在进行拆分&#xff0c;拆分出数据主体&#xff08;user.vue&#xff09;&#xff0c;侧边栏&#xff08;aside&#xff09;&#xff0c;顶部栏&#xff08;Header&#xff09;&…

SpringCloudAlibaba 学习笔记

❤ 作者主页&#xff1a;Java技术一点通的博客 ❀ 个人介绍&#xff1a;大家好&#xff0c;我是Java技术一点通&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 记得关注、点赞、收藏、评论⭐️⭐️⭐️ &#x1f4e3; 认真学习&#xff0c;共同进步&#xff01;&am…

疫情卷土重来,如何利用SRM系统打造数字化的“免疫系统”

2022年末&#xff0c;国内疫情再次卷土重来&#xff0c;形势严峻。国内企业也再次面临业务发展的压力。但实际上&#xff0c;在疫情常态化后&#xff0c;我国许多大中型企业都建立了全面的数字化“免疫系统”&#xff0c;增强了抗风险和跨周期的能力&#xff0c;大大增强了抵御…

【B站】Presto + Alluxio:B站数据库系统性能提升实践

欢迎来到【微直播间】&#xff0c;2min纵览大咖观点 在日常线上生产环境中有大量的数据需要被访问&#xff0c;为了保证数据同步以及查询效率&#xff0c;需要耗费较大的资源&#xff0c;同时&#xff0c;很多被查询和访问的数据是重复的&#xff0c;这对数据库系统造成极大压…

C++类和对象概念及实现详解(下篇)

文章目录 一、类的六个默认成员函数详解 1、拷贝构造 1、1 拷贝构造的引入及概念 1、2 拷贝构造函数的特征 2、赋值运算符重载 2、1 运算符重载 2、2 赋值运算符重载 3、普通对象取地址 4、const对象取地址 二、类和对象重点知识点 1、初始化列表 2、static成员 3、友元函数 4、…

一文带你走进MySQL索引

文章目录索引1. 索引的介绍2. 索引的本质3. 索引的结构3.1 Hash3.2 B树3.3 常见面试题之为什么用B树4. 索引的分类4.1 功能逻辑层次4.2 存储形式层次5. 索引的失效5.1 最左前缀原则5.2 索引失效的场景6. 索引常见面试题7. 总结及参考文献索引 1. 索引的介绍 索引是通过某种算…

潘多拉-视频播放器,一个轻量的视频播放器

潘多拉-视频播放器 轻量视频播放器,该项目是从https://github.com/getActivity/AndroidProject-Kotlin 中抽离出的一个视频播放器,之前没有 单独设置项目,我在使用过程中觉得这个挺方便好用的,所以为了方便使用,单独剥离出来,可以单独在项目中使用,后续我也会基于这个项目进行…

【数据结构】Leetcode旋转数组

目录 一、题目说明 二、题目解析 一、题目说明 题目链接&#xff1a;leetcode旋转数组 给你一个数组&#xff0c;将数组中的元素向右轮转k个位置&#xff0c;其中k是非负数。 示例1&#xff1a; 输入&#xff1a;nums [1,2,3,4,5,6,7],k 3 输出&#xff1a;[5,6,7,1,2,3,4…

给大家分享5款轻便小巧的好软件

随着网络信息技术的发展&#xff0c;越来越多的人在办公时需要用到电脑了。如果你想提高办公效率&#xff0c;那么就少不了工具的帮忙&#xff0c;今天给大家分享5款办公必备的好软件。 1.开源分享工具——ShareX ShareX 是一款 Windows 上开源的截图、文件共享和生产力工具&…

IB 生申请德国大学的条件

Hallo! 你是IB生吗&#xff1f;是否有去德国读大学的意愿&#xff1f;来看看IB生申请德国大学的条件吧~ 01IB课程简介 IB课程包括六个学科组&#xff0c;其中一个必须从 IBO 指定的第 1 到第 5 个科目组中选修&#xff0c;另外还有一个可选科目&#xff0c;可以从六个科目组中选…

华为智能基座【计算机组成原理】

华为智能基座【计算机组成原理】前言推荐华为智能基座实验1 基于QEMU的鲲鹏开发环境搭建1.1 QEMU的安装配置1.1.1 QEMU下载安装1.1.2 环境变量配置1.2 openEuler操作系统安装1.2.1 环境准备1.2.2 openEuler虚拟机创建1. 打开虚拟机2. 修改串口并登录1.3 网络配置1.3.1 参数设置…

骨传导耳机到底好不好用,五款好用的骨传导蓝牙耳机分享

很多人刚接触骨传导耳机&#xff0c;都会有一个疑问&#xff0c;骨传导耳机到底好不好用&#xff0c;下面我就为大家解答疑惑&#xff0c;骨传导耳机开放式的佩戴方式&#xff0c;更加舒适&#xff0c;使用更加安全&#xff0c;在平常使用都是很好用的&#xff0c;还不知道选择…

JAVA生成二维码QRcode

JAVA生成二维码QRcode1 : 配置集成1.1、配置maven1.2、配置文件1.3、logo文件2 : 代码集成2.1、加载配置文件2.2、工具类2.3、测试类3 : 测试结果3.1、生成二维码3.2、扫描结果3.3、资源1 : 配置集成 1.1、配置maven pom文件中添加一下配置 <!-- QR code --> <depe…

立根铸魂 崛起数智时代 欧拉部署超300万套

操作系统产业峰会2022于12月28日在线上举办。本次峰会由开放原子开源基金会、中国软件行业协会、CCF&#xff08;中国计算机学会&#xff09;开源专委会、绿色计算产业联盟、中关村科学城管委会共同主办&#xff0c;以“立根铸魂 崛起数智时代”为主题&#xff0c;汇聚全产业链…

Day842.Future -Java 并发编程实战

Future Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于Future的内容。 ThreadPoolExecutor 的 void execute(Runnable command) 方法&#xff0c;利用这个方法虽然可以提交任务&#xff0c;但是却没有办法获取任务的执行结果&#xff08;execute() 方法没有返回值&…

Java Web高级面试题(二)

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java面试题…

总体分布、样本分布、抽样分布的区别

总体分布、样本分布、抽样分布的区别 参考自&#xff1a;THREE DISTRIBUTIONS 1.总体分布 The population is the whole set of values, or individuals, you are interested in. The population which consists of a set of scores (5, 6, 7, 8) which distribute around a …

比Hive还快10倍的大数据计算引擎

最近几年&#xff0c;Presto这个大数据组件越来越多地出现在程序员的岗位需求中&#xff0c;很多应届同学一番自我检查后发现&#xff0c;在学校都没怎么接触过&#xff0c;更不用说了解了。 某游戏公司岗位需求 Presto到底是个啥&#xff1f; 有什么用&#xff1f; 适合哪些…