当前位置: 首页 > news >正文

(SpringBoot)第五章:SpringBoot创建和使用

文章目录

  • 一:Spring和SpringBoot
    • (1)Spring已解决和未解决的问题
    • (2)SpringBoot
  • 二:Spring项目的创建
    • (1)IDEA创建
    • (2)网页端创建
  • 三:项目目录介绍及运行
    • (1)项目目录介绍
    • (2)Hello World
    • (3)约定大于配置

一:Spring和SpringBoot

(1)Spring已解决和未解决的问题

Spring已解决问题:Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java对象(Plain Old Java Object,POJO)实现了EJB的功能

  • 使用Spring的IOC容器,将对象之间的依赖关系交给Spring,降低组件之间的耦合性,让我们更专注于应用逻辑
  • 可以提供众多服务,事务管理,WS等
  • AOP的很好支持,方便面向切面编程
  • 对主流的框架提供了很好的集成支持,如Hibernate,Struts2,JPA
  • Spring DI机制降低了业务对象替换的复杂性
  • Spring属于低侵入,代码污染极低
  • Spring的高度可开放性,并不强制依赖于Spring,开发者可以自由选择Spring部分或全部

Spring未解决问题:虽然Spring的组件代码是轻量级的,但它的配置却是重量级的

  • 一开始,Spring用XML配置,而且是很多XML配置
  • Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置
  • Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML

但是

  • 所有这些配置都代表了开发时的损耗。因为在思考Spring特性配置和解决业务问题之间需要进行思维切换,所以编写配置挤占了编写应用程序逻辑的时间
  • 除此之外,项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进

(2)SpringBoot

SpringBoot:是一个用于构建独立的、生产级别的基于 Spring 框架的应用程序的开源框架。它是 Spring 生态系统的一部分,旨在简化 Spring 应用程序的开发和部署过程。Spring Boot 提供了一种快速、无配置的方式来创建 Spring 应用程序,减少了繁琐的配置和样板代码,使开发者能够更专注于应用程序的业务逻辑。其特点如下

  • 简化配置:Spring Boot 自动配置了许多常见的应用程序组件,如数据源、Web 服务器、安全等,减少了手动配置的需要
  • 内嵌式容器:Spring Boot 支持内嵌式的容器,如Tomcat、Jetty和Undertow,使应用程序可以作为独立的可执行 JAR 文件或 WAR 文件运行,无需外部的 Web 服务器
  • 开箱即用:Spring Boot 提供了许多预定义的 Starter 依赖,可以轻松集成各种技术和框架,如Spring Data、Spring Security、Thymeleaf、JPA、MongoDB、Redis等
  • 自动配置:Spring Boot 根据应用程序的依赖和配置自动配置 Spring 框架,减少了手动配置的工作
  • 嵌入式数据库支持:Spring Boot 支持内嵌式数据库,如H2、HSQLDB、Derby等,方便开发和测试
  • 生产就绪:Spring Boot 提供了监控、度量、健康检查等功能,使应用程序容易部署和管理
  • 外部化配置:Spring Boot 支持将配置参数外部化,可以使用属性文件、YAML 文件、环境变量等方式来配置应用程序,便于不同环境的部署
  • 微服务支持:Spring Boot 可以与 Spring Cloud 结合使用,构建微服务架构,实现服务发现、负载均衡、断路器等功能

总而言之,SpringBoot最核心的就是以下三点

  • 快速添加依赖
  • 内置Web容器
  • 自动装配

二:Spring项目的创建

(1)IDEA创建

  • 注意:社区版无此选项
  • 2022.12官方发布SpringBoot3,基于Spring6,要求最低JDK版本17

新建project,选择Spring Initializr

在这里插入图片描述

填写信息如下

在这里插入图片描述

选择版本,和依赖

在这里插入图片描述

创建完毕

在这里插入图片描述

运行

在这里插入图片描述

(2)网页端创建

  • Spring Initializr

在这里插入图片描述

在这里插入图片描述

点击⽣成按钮会下载⼀个 Spring Boot 的 zip 包,解压后,用IDEA打开

三:项目目录介绍及运行

(1)项目目录介绍

Spring项目结构如下

在这里插入图片描述

其中.mvnHELP.mdmvnwmvnw.cmd这个四个文件(文件夹)没有什么作用,可删除

在这里插入图片描述

SpringBoot项目的启动类默认名字叫做DemoApplication,右键运行即可

在这里插入图片描述

在这里插入图片描述

(2)Hello World

我们学习Java EE目的就是要实现Web项目或接口的,之前的SpringFrameWork只不过是一个普通的Java项目,无法直接和浏览器交互。因此,现在我们需要使用SpringBoot来实现交互

创建一个UserController文件,然后添加注解

  • @RestController=@Controller+@ResponseBody
package com.example.springfirstdemo_2023_11_09;  import org.springframework.stereotype.Controller;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.ResponseBody;  @Controller // 当前类为控制器  
@ResponseBody // 返回的是数据而非页面  
public class TestController {  @RequestMapping("/hi") // 路由注册  public String sayHello(String name) {  return "Hello";  }  
}

在这里插入图片描述

(3)约定大于配置

约定大于配置:是 Spring Boot 框架的设计理念之一,它强调通过一系列的默认约定来减少配置的工作,从而简化开发过程。这一理念的目标是提高开发者的生产力,使得开发过程更加快速和简便。比如在Spring中是需要配置扫描路径的,而SpringBoot则不需要

相关文章:

(SpringBoot)第五章:SpringBoot创建和使用

文章目录 一:Spring和SpringBoot(1)Spring已解决和未解决的问题(2)SpringBoot 二:Spring项目的创建(1)IDEA创建(2)网页端创建 三:项目目录介绍及运…...

Linux重定向

文章目录 1. 文件描述符分配规则2. 重定向接口dup2自定义shell重定向(补充) 3. 标准输出和标准错误4. 如何理解一切接文件 本章代码gitee地址:文件重定向 1. 文件描述符分配规则 文件描述符的分配规则是从0下标开始,寻址最小的没有使用的数组位置&#…...

Python之文件与文件夹操作及 pytest 测试习题

目录 1、文本文件读写基础。编写程序,在 当前目录下创建一个文本文件 test.txt,并向其中写入字符串 hello world。2、编写一个程序 demo.py,要求运行该程序后,生成 demo_new.py 文件,其中内容与demo.py 一样&#xff0…...

物联网:实现数据驱动决策,推动经济发展

开发物联网系统的意义主要体现在以下几个方面: 连接一切:物联网的目标是连接一切,将生活中的各种物理对象互联起来。通过物联网开发,我们可以实现各类设备的智能化,包括家居设备、交通工具、工业设备等。这将为人们提…...

Leetcode 2929. Distribute Candies Among Children II

Leetcode 2929. Distribute Candies Among Children II 1. 解题思路2. 代码实现 题目链接:2929. Distribute Candies Among Children II 1. 解题思路 这一题很惭愧,没能自力搞定,最后是看了大佬的思路之后才做出来的,唉…… 这…...

【面经】ES中分片是什么?副本是什么?

ES分片 分片是将一个索引切分为多个底层物理的Lucene索引,这些被切分出来的每个部分称为一个分片。 每个分片都是一个全功能且独立的索引,可由集群中的任何主机存储。 在创建索引时,用户可以指定其分片的数量。 默认情况下,每个索…...

【算法练习Day46】判断子序列不同的子序列

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 判断子序列不同的子序列总结…...

Java设计模式之访问者模式

目录 定义 结构 案例 优点 缺点 使用场景 扩展 分派 案例实现须知 动态分派 静态分派 双分派 定义 封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。 结构 访问者模式包含以下主要角色…...

PySide/PYQT如何用Qt Designer和代码来设置文字属性,如何设置文字颜色?

文章目录 📖 介绍 📖🏡 环境 🏡📒 实现方法 📒📝 Qt Designer设置📝 代码📖 介绍 📖 本人介绍如何使用Qt Designer/代码来设置字体属性(包含字体颜色) 🏡 环境 🏡 本文使用Pyside6来进行演示📒 实现方法 📒 📝 Qt Designer设置 首先打开Qt De…...

ubuntu 设置最大带宽

背景 近日做实验,需要限制一些机子的带宽以达到模拟的效果。在网上搜索了一阵子,结合自己实操的经验,潦草写下这篇文章,供自己与有需要的人参考。 环境: Ubuntu 22.04.1 LTS 安装 wondershaper 和 speedtest-cli w…...

如何在 Python 中执行 MySQL 结果限制和分页查询

Python MySQL 限制结果 限制结果数量 示例 1: 获取您自己的 Python 服务器 选择 “customers” 表中的前 5 条记录: import mysql.connectormydb mysql.connector.connect(host"localhost",user"您的用户名",password"您的密码"…...

Django配置文件,request,链接mysql方法,Orm简介

三板斧问题(views.py) HttpResponse # 返回的是字符串render # 渲染一个HTML静态文件,模板文件redirect # 重定向的 在视图文件中得视图函数必须要接收一个形参request,并且,视图函数也要有返回值&#xff…...

ubuntu下载各个版本chrome方法

Ubuntu/debian 在这里面找版本 https://unix.stackexchange.com/a/612981然后添充进去 http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_[HERE_THE_FULL_VERSION]_amd64.deb比如:https://dl.google.com/linux/chro…...

Http状态码502常见原因及排错思路(实战)

Http状态码502常见原因及排错思路 502表示Bad Gateway。当Nginx返回502错误时,通常表示Nginx作为代理服务器无法从上游服务器(如:我们的后端服务器地址)获取有效的响应。导致这种情况的原因有很多: 后端服务器故障ngin…...

国际阿里云:无法ping通ECS实例公网IP的排查方法!!!

无法ping通ECS实例的原因较多,您可以参考本文进行排查。 问题现象 本地客户端无法ping通目标ECS实例公网IP,例如: 本地客户端为Linux系统,ping目标ECS实例公网IP时无响应,如下所示: 本地客户端为Windo…...

Nginx缓存基础

1 nginx缓存的流程 客户端需要访问服务器的数据时,如果都直接向服务器发送请求,服务器接收过多的请求,压力会比较大,也比较耗时;而如果在nginx缓存一定的数据,使客户端向基于nginx的代理服务器发送请求&…...

【数据结构】Lambda

⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:浅谈数据结构 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 Lambda表达式 1. 背景1.1 语法1.2 函…...

力扣labuladong——一刷day28

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、力扣380. O(1) 时间插入、删除和获取随机元素二、力扣710. 黑名单中的随机数 前言 常数时间删除-查找数组中的任意元素,且随机访问概率一致 如果…...

2023年CCF非专业级别软件能力认证第二轮 (CSP-S)提高级C++语言试题

2023年CCF非专业级别软件能力认证第二轮 (CSP-S)提高级C语言试题 编程题第 1 题 问答题 密码锁(lock) 题目描述 小Y有一把五个拨圈的密码锁。如图所示,每个拨圈上是从0到9的数字。每个拨圈都是从0到9的循环&#xf…...

华为ensp:静态默认路由

静态路由 到r2 上的系统视图模式 下一跳为1.1.1.2 ip route-static 192.168.2.0 255.255.255.0 1.1.1.2 如果找2网段下一跳为1.1.1.2接口 默认路由 到r3上做的是默认路由 ip route-static 0.0.0.0 0 1.1.1.1 所有的流量去找1.1.1.1 查看效果 只要做完完整的路由就可…...

python打卡day49

知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

【2025年】解决Burpsuite抓不到https包的问题

环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

ip子接口配置及删除

配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...