Spring与SpringBoot入门

Spring入门

要使用Spring最起码需要引入两个依赖:

<!-- Spring Core(核心) -->
 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-core</artifactId>
 <version>5.3.20</version>
 </dependency>
 <!-- Spring Context(容器) -->
 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-context</artifactId>
 <version>5.3.20</version>
 </dependency>

Spring本质上就是一个大的"容器",他可以帮我们创建(实例化)好我们需要的对象,我们需要

使用这些对象的时候,只需要给这个容器要就可以了,即从容器中取出来使用即可

最基本的使用Spring的方式:

public class SpringMain {
 public static void main(String[] args) {
 // 1.加载配置类
AnnotationConfigApplicationContext ctx =  new 
AnnotationConfigApplicationContext(SpringConfig.class);
 // 2.从容器中取需要的对象
IHelloService helloService =  ctx.getBean(IHelloService.class);
 // 3.调用需要的对象方法
helloService.sayHello();
 }
 }

第一步干了啥?

//1. 加载配置类
AnnotationConfigApplicationContext ctx =  new 
AnnotationConfigApplicationContext(SpringConfig.class);

AnnotationConfigApplicationContext类是Spring自带的类,这个类的作用就是加载一个配置文件;

如果想知道加载的这个文件是不是一个配置类: SpringConfig怎么就知道它是一个配置类呢?

使用@Configuration注解:

//此注解就代表他是一个配置类
@Configuration
 public class SpringConfig {
 }

一般情况下,这个配置类,要想干点活,还得结合其他的注解一块参与:

比如以下场景: 需要再使用@ComponentScan注解参与其他逻辑

//此注解就代表这个类是一个配置类
@Configuration
//此注解用于扫描组件,把扫描到的组件,让Spring管理起来
@componentScan(basepack = "com.gengguolong.spring")
public class SpringConfig{
    
}

@ComponentScan此注解用于从指定的包下边进行所有的类扫描,它只扫描或搜索被@Component注解修饰的那些类,把那些类实例化好放到Spring容器里

第二步

IHelloService helloService =  ctx.getBean(IHelloService.class);

从容器中,直接获取我想要的对象

第三步

helloService.sayHello();
需要注意的点:

默认情况下,Spring帮我们实例化好的对象,是单例,即我们每次使用ctx.getBean(“xxx”),从容器中取对象的时候,取多次也是同一个对象.

需要记住的点:

loc控制反转

以前我们需要什么对象的时候,自己来new,但现在使用了Spring框架,我们不用自己new了,用的时候直接给Spring要就行了.

以前new对象是由我们自己控制的,现在new对象不归我们管了,让Spring接手了,对new对象的控制权交给框架(第三方),这种模式叫做控制反转,也叫loc(Inversion of Control)

2.SpringBoot入门

SpringBoot框架是基于Spring的思想开发出来的一套快速的开发Web的框架,它的底层仍然是Servlet那一套

  1. 内部默认集成好了Tomcat,无需关心Tomcat服务器的配置.
  2. 内部默认集成好了一大批组件,用的时候开启(在配置文件里配置一下)即可.

SpringBoot的目的就是简化开发

SpringBoot项目的创建过程

  1. 创建项目:
    在这里插入图片描述

  2. 选开发依赖的组件及框架
    在这里插入图片描述

  3. 在项目的入口类同级,建立常规的项目包:

在这里插入图片描述

  1. 开始编写Controller

Controller用于接收用户输入.调用Service处理业务逻辑,给用户输出为了表明它是一个控制器类,使用@Controller注解标记

@controller
public class Mycontroller{
    
}

为了能让这个Controller接受用户请求,需要使用@RequestMapping注解标记URL

@controller
@RequestMapping("/my")
public class MyController{
    public void hello(){
        
    }
}

为了能让这个方法运行再次指定下一级URL地址

@Controller
@RequestMapping("/my")
public class MyController{
    //请求地址是:/my/hello
    @RequestMapping("/hello")
    public void hello(){
        System.out.println("hello你好,我来了");
    }
}

接下来就可以运行了: http://localhost:8080/my/hello

以上只是在控制台输出内容,我想在游览器输出以上字符串怎么办? 使用@ResponseBody注解,代表方法的返回值作为响应体,响应给游览器,让游览器展示

@Controller
@RequestMapping("/my")
public class Myconntroller {
 // 请求地址是:/my/hello
 @RequestMapping("/hello")
 @ResponseBody
 public String hello(){
 // System.out.println("hello你好,我来了。");
 return "hello你好,我来了。";
 }
 }

nntroller {
// 请求地址是:/my/hello
@RequestMapping(“/hello”)
@ResponseBody
public String hello(){
// System.out.println(“hello你好,我来了。”);
return “hello你好,我来了。”;
}
}


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小白水平理解面试经典题目LeetCode 655. Print Binary Tree【Tree】

655 打印二叉树 一、小白翻译 给定二叉树的 root &#xff0c;构造一个 0 索引的 m x n 字符串矩阵 res 来表示树的格式化布局。格式化布局矩阵应使用以下规则构建&#xff1a; 树的高度为 height &#xff0c;行数 m 应等于 height 1 。 列数 n 应等于​​xheight1​​ - …

爆火的1分钟声音克隆GPT-SoVITS项目 linux系统 ubuntu22.04安装2天踩坑教程

原项目地址&#xff1a;https://github.com/RVC-Boss/GPT-SoVITS 1分钟素材&#xff0c;最后出来的效果确实不错。 1. cuda环境安装 cuda环境准备 根据项目要求在cuda11.8和12.3都测试了通过。我这里是用cuda11.8 cuda11.8安装教程&#xff1a; ubuntu 22.04 cuda多版本和…

【软件测试】--功能测试4-html介绍

1.1 前端三大核心 html:超文本标记语言&#xff0c;由一套标记标签组成 标签&#xff1a; 单标签&#xff1a;<标签名 /> 双标签:<标签名></标签名> 属性&#xff1a;描述某一特征 示例:<a 属性名"属性值"> 1.2 html骨架标签 <!DOC…

蓝桥杯第十四届电子类单片机组决赛程序设计

目录 前言 单片机资源数据包_2023&#xff08;点击下载&#xff09; 一、第十四届比赛题目 1.比赛题目 2.题目解读 1&#xff09;任务要求 2&#xff09;注意事项 二、显示功能实现 1.关于高位为0时数码管熄灭功能的实现 2.关于显示小数位的处理 3.关于“校准值”的…

某查查首页瀑布流headers加密

目标网站&#xff1a; 某查查 对目标网站分析发现 红框内的参数和值都是加密的&#xff0c;是根据算法算出来的&#xff0c;故进行逆向分析。 由于没有固定参数名&#xff0c;只能通过搜索headers&#xff0c;在搜索的位置上打上断点&#xff0c;重新请求。 断点在此处断住&a…

【计算机】本科考研还是就业?

其实现在很多计算机专业的学生考研&#xff0c;也是无奈的选择 技术发展日新月异&#xff0c;而在本科阶段&#xff0c;大家学着落后的技术&#xff0c;出来找工作自然会碰壁。而且现在用人单位的门槛越来越高&#xff0c;学历默认研究生起步&#xff0c;面试一般都是三轮起步…

循序渐进丨MogDB / openGauss 如何实现自增主键

概述 自增主键是我们在设计数据库表结构时经常使用的主键生成策略&#xff0c;主键的生成可以完全依赖数据库&#xff0c;无需人为干预&#xff0c;在新增数据的时候&#xff0c;我们只需要将主键的值设置为default&#xff0c;数据库就会为我们自动生成一个主键值。 MySQL 主键…

基于沁恒微 ch643q 多通道采集 adc 驱动层实现

一、代码 #include "main.h"/********************************************************************** fn ADC_Function_Init** brief Initializes ADC collection.** return none*/ void ADC_Function_Init(void) {ADC_InitTypeDef ADC_InitStructure …

【Go 快速入门】协程 | 通道 | select 多路复用 | sync 包

文章目录 前言协程goroutine 调度使用 goroutine 通道无缓冲通道有缓冲通道单向通道 select 多路复用syncsync.WaitGroupsync.Mutexsync.RWMutexsync.Oncesync.Map 项目代码地址&#xff1a;05-GoroutineChannelSync 前言 Go 1.22 版本于不久前推出&#xff0c;更新的新特性可…

LoRa技术在智能气象监测中的应用与解决方案分享

LoRa技术在智能气象监测领域的应用具有广泛的前景&#xff0c;通过LoRa技术可以实现对气象数据的远程采集、传输和监测&#xff0c;为气象行业提供更加智能化和高效的解决方案。以下将探讨LoRa技术在智能气象监测中的应用与解决方案分享。 首先&#xff0c;LoRa技术可以用于连…

python|闲谈2048小游戏和数组的旋转及翻转和转置

目录 2048 生成数组 n阶方阵 方阵旋转 顺时针旋转 逆时针旋转 mxn矩阵 矩阵旋转 测试代码 测试结果 翻转和转置 2048 《2048》是一款比较流行​的数字游戏​&#xff0c;最早于2014年3月20日发行。原版2048由Gabriele Cirulli首先在GitHub上发布&#xff0c;后被移…

【C语言】数据存储篇,内存中的数据存储----C语言整型,浮点数的数据在内存中的存储以及大小端字节序【图文详解】

欢迎来CILMY23的博客喔&#xff0c;本篇为​【C语言】数据存储篇&#xff0c;内存中的数据存储----C语言整型&#xff0c;浮点数的数据在内存中的存储以及大小端字节序【图文详解】&#xff0c;感谢观看&#xff0c;支持的可以给个一键三连&#xff0c;点赞关注收藏。 前言 C语…

GIS之深度学习02:Anaconda2019版本安装(py38)

Anaconda是一个专注于数据科学和机器学习的开源发行版&#xff0c;内置了丰富的工具和库&#xff0c;包括Python解释器、NumPy、SciPy、Pandas、Scikit-learn、TensorFlow等&#xff0c;使用户能够轻松进行科学计算和数据分析。其强大的包管理器conda简化了软件包的安装和环境管…

Linux/Spectra

Enumeration nmap 第一次扫描发现系统对外开放了22&#xff0c;80和3306端口&#xff0c;端口详细信息如下 22端口运行着ssh&#xff0c;80端口还是http&#xff0c;不过不同的是打开了mysql的3306端口 TCP/80 进入首页&#xff0c;点击链接时&#xff0c;提示域名不能解析&…

4核8G服务器并发数多少?性能如何?

腾讯云4核8G服务器支持多少人在线访问&#xff1f;支持25人同时访问。实际上程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#xff0c;假设公网带宽太小&#xff0c;流量直接卡在入口&#xff0c;4核8G配置的CPU内存也会造成计算…

vue3 增加全局水印(显示登录信息)

一、纯文字水印 在main.ts页面里面 加入以下代码&#xff1a; // 导入 Vue 的 createApp 函数 import { createApp } from vue;// 导入全局样式文件 import ./style.css;// 导入根组件 App.vue import App from ./App.vue;// 导入路由配置 import router from ./router;// 使…

VUE从0到1创建项目及基本路由、页面配置

一、创建项目:(前提已经安装好vue和npm) 目录:E:\personal\project_pro\ windows下,win+R 输入cmd进入命令行: cd E:\personal\project_pro E:# 创建名为test的项目 vue create test# 用上下键选择vue2或vue3,回车确认创建本次选择VUE3 创建好项目后,使用…

【CSS-语法】

CSS-语法 ■ CSS简介■ CSS 实例■ CSS id 和 class选择器■ CSS 样式表■ 外部样式表(External style sheet)■ 内部样式表(Internal style sheet)■ 内联样式(Inline style)■ 多重样式 ■ CSS 文本■ CSS 文本颜色■ CSS 文本的对齐方式■ CSS 文本修饰■ CSS 文本转换■ CS…

2024智慧城市革命:人工智能、场景与运营的融合之力

在数字革命的浪潮中&#xff0c;2024年的智慧城市将成为人类社会进步的新地标。 三大关键元素——人工智能、场景应用和精准运营——正在重新塑造城市面貌&#xff0c;构建未来的智慧城市生活图景。 一、人工智能&#xff1a;赋能智慧城市 随着人工智能技术的快速发展&#x…

第十二篇【传奇开心果系列】Python文本和语音相互转换库技术点案例示例:深度解读SpeechRecognition语音转文本

传奇开心果系列 系列博文目录Python的文本和语音相互转换库技术点案例示例系列 博文目录前言一、SpeechRecognition语音转文本一般的操作步骤和示例代码二、SpeechRecognition 语音转文本的优势和特点三、易用性深度解读和示例代码四、多引擎支持深度解读和示例代码五、灵活性示…