SpringBoot入门指南(学习笔记)

概述

Springboot是Spring的一个子项目,用于快速构建Spring应用程序

入门

①创建SpringBoot工程

②编写Controller

@RestController
public class HelloContoller {@RequestMapping("/hello")public String hello() {return "hello";}
}

③运行启动类:xxxxApplication

配置文件

用于修改SpringBoot相关配置

Spring提供了多种配置文件格式:只有格式区别

1、application.properties

2、application.yml(更常用)

配置信息的书写和使用:

  • 添加配置
email: user: wmh031024@163.comcode: xxxxxxx
  • 获取配置

① @Value

@Component
public class EmailProperties {@Value("${email.user}")public String user;@Value("${email.code}")    public String code;
}

② @ConfigurationProperties

@Component
@ConfigurationProperties(prefix = "emil")
public class EmailProperties {public String user;public String code;
}

整合mybatis

1、导入maven坐标

<!--MySQL驱动依赖-->
<dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId>
</dependency><!--mybatis起步依赖-->
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.0</version>
</dependency>

2、配置文件

spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/Springusername: rootpassword: root

3、Mapper类

@Mapper
public interface UserMapper {@Select("select * from class1 where id = #{id}")public User findById(Integer id);
}

Bean管理

Bean注册

注册第三方的Bean对象时,没法办用@Component注解声明Bean。

1、创建配置类 ,使用 @Bean注入对象

@Configuration
public class CommonConfig {@Beanpublic User user() {return new User();}
}

2、导入配置类

方式一(单个导入): 使用@Import直接导入

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

**方式二(多个导入):**使用@Import导入 ImportSelector 接口实现类

public class CommonImportSelector implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {return new String[]{"cn.wmhwiki.config.CommonConfig"};}
}
@SpringBootApplication
@Import(CommonImportSelector.class)
public class BootDemo1Application {public static void main(String[] args) {SpringApplication.run(BootDemo1Application.class, args);}
}

注册条件

Bean注册并相应的值

user:name: yxvalue: 250
@Bean
public User user(@Value("${user.name}") String name, @Value("${user.value}") String value) {return new User(name, value);
}

SpringBoot提供了设置注册生效条件的注解 @Conditional

注解说明
@ConditionalOnProperty配置文件中存在对应的属性,才声明该bean
@ConditionalOnMissingBean当不存在当前类型的bean时,才声明该bean
@ConditionalOnClass当前环境存在指定的这个类时,才声明该bean

自动配置

原理

  1. 在主启动类上添加了SpringBootApplication注解,这个注解组合了EnableAutoConfiguration注解
  2. EnableAutoConfiguration注解又组合了Import注解,导入了AutoConfigurationImportSelector类
  3. 实现selectImports方法,这个方法经过层层调用,最终会读取META-INF 目录下的后缀名为imorts的文件(boot2.7以前的版本,读取的是spring.factories文件)
  4. 读取到全类名了之后,会解析注册条件,也就是@Conditional及其衍生注解,把满足注册条件的Bean对象自动注入到IOC容器中

自定义starter

在实际开发中,经常会定义一些公共组件,提供给各个项目团队使用。而在SpringBoot的项目中,一般会将这些公共组件封装为SpringBoot 的 starter。

  1. 创建 dmybatis-spring-boot-autoconfigure 模块,提供自动配置功能,并自定义配置文件 META-INF/spring/xxx.imports
  2. 创建 dmybatis-spring-boot-starter 模块,在starter中引入自动配置模块

以Mybatis为例,制作Mybatis自动配置

1、创建dmybatis-spring-boot-autoconfig

2、导入maven坐标

照着mybatis-spring-boot-starter导包

3、编写MyBatisAutoConfig配置类

@AutoConfiguration
public class MyBatisAutoConfig {@Beanpublic SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource) {SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(dataSource);return sqlSessionFactoryBean;}@Beanpublic MapperScannerConfigurer mapperScannerConfigurer(BeanFactory beanFactory) {MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();// 包扫描List<String> packages = AutoConfigurationPackages.get(beanFactory);mapperScannerConfigurer.setBasePackage(packages.get(0));// 注解扫描mapperScannerConfigurer.setAnnotationClass(Mapper.class);return mapperScannerConfigurer;}
}

4、创建imports文件,填入配置类的全类名

META-INF/spring/org.springframework.boot.test.autoconfigure.core.AutoConfigureCache.imports

5、创建dmybatis-spring-boot-starter

image-20231106221613892

6、导入maven坐标

7、导入jdk17插件

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.11.0</version><configuration><source>17</source><target>17</target></configuration></plugin></plugins>
</build>

8、测试使用

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

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

相关文章

golang锁源码【只有关键逻辑】

条件锁 type Cond struct {L Lockernotify notifyList } type notifyList struct {wait uint32 //表示当前 Wait 的最大 ticket 值notify uint32 //表示目前已唤醒的 goroutine 的 ticket 的最大值lock uintptr // key field of the mutexhead unsafe.Pointer //链表头…

论文解读:Coordinate Attention for Efficient Mobile Network Design(CVPR2021)

论文前言 原理其实很简单&#xff0c;但是论文作者说得很抽象&#xff0c;时间紧的建议直接看3.1中原理简述CBMA、原理简述CBMA以及3.2中原理简述coordinate attention block即可。 Abstract 最近关于mobile network设计的研究已经证明了通道注意(例如&#xff0c;the Squee…

23. 一维数组

写在前面&#xff1a; 今天是2023年12月31日&#xff0c;也是整个2023年的最后一天。我在CSDN上只有短短几个月的时光&#xff0c;但非常感谢大家的支持&#xff0c;作为一名刚刚大一的大学生呢&#xff0c;学习编程&#xff0c;学习写博客是很重要的事&#xff0c;所以在新的…

翻页的电子画册如何制作

​在过去&#xff0c;一本精美的画册往往需要大量的人力物力去印刷、装帧、运输。而现在&#xff0c;只需一台电脑、一个网址和一个创意&#xff0c;就可以轻松制作出一本电子画册。这种变化不仅降低了成本&#xff0c;还带来了更多的便利性和灵活性。 首先&#xff0c;你需要选…

网络故障排查和流量分析利器-Tcpdump命令

Tcpdump是一个在Unix/Linux系统上广泛使用的命令行网络抓包工具。它能够捕获经过网络接口的数据包&#xff0c;并将其以可读的格式输出到终端或文件中。Tcpdump是一个强大的命令行工具&#xff0c;能够捕获和分析网络数据包&#xff0c;为网络管理员和安全专业人员提供了深入了…

【网络面试(6)】IP协议对网络包的转发

在前面的博客中&#xff0c;我们提到过&#xff0c;网络传输的报文是有真实的数据包和一些头部组成&#xff0c;目前我们了解的头部就有TCP头、IP头、MAC头&#xff0c;而且这三个头部信息都是在应用程序委托给协议栈之后&#xff0c;被写入的相关信息&#xff0c;这些头部都是…

修改jenkins的目录(JENKINS_HOME)

默认JENKINS_HOME是/var/lib/jenkins/ 现要修改为/home/jenkins_data/jenkins 最开始 sudo cp -a /var/lib/jenkins/ /home/jenkins_data/ 然后如下操作&#xff1a; 1、首先 /etc/sysconfig/jenkins&#xff1a;jenkins配置文件&#xff0c;“端口”&#xff0c;“JENKIN…

08-接口文档管理工具-项目集成knife4j__ev

2、knife4j快速入门 2.1 knife4j介绍 knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望它能像一把匕首一样小巧,轻量,并且功能强悍! gitee地址&#xff1a;knife4j: Knife4j是一个集Swagger2 和 OpenAPI3为一体的增…

第二十六周:学习笔记

第二十六周&#xff1a;学习笔记 摘要Abstract全卷积网络 FCN1. CNN 与 FCN2. 全连接层 --> 成卷积层3. FCN的缺点 摘要 全卷积神经网络&#xff08;Fully Convolutional Network&#xff0c;FCN&#xff09;是一种用于图像分割和语义分割任务的深度学习模型。与传统的卷积…

使用python快速开发与PDF文档对话的Gemini聊天机器人

检索增强生成(Retrieval-augmented generation&#xff0c;RAG)使得我们可以让大型语言模型(LLMs)访问外部知识库数据(如pdf,word、text等)&#xff0c;从而让人们可以更加方便的通过LLM来学习外部数据的知识。今天我们将利用之前学习到的RAG方法&#xff0c;谷歌Gemini模型和l…

费曼学习法应用:谈自私和教育的引导

今天这个还是来源于我和九迁的对话&#xff0c;起因是中午吃饭的时候&#xff0c;九迁在学校与班主任老师和数学老师对话中带来的思考。 先听音频&#xff1a; 对话内容&#xff08;以下内容可以边听边看&#xff0c;属于语音转换过来的文字&#xff0c;最后有个总结&#xff0…

U4_3 语法分析-自底向上分析-LR0/LR1/SLR分析

文章目录 一、LR分析法1、概念2、流程3、LR分析器结构及分析表构造1&#xff09;结构2&#xff09;一些概念 二、LR(0)分析法1、流程2、分析动作1&#xff09;移近2&#xff09;归约(reduce) 3、总结1&#xff09;LR分析器2&#xff09;构造DFA3&#xff09;构造LR(0)的方法(三…

基于Vite创建简单Vue3工程

首先安装node.js环境&#xff0c;没有node.js环境&#xff0c;便没有npm命令。 1、Vue3创建执行命令 D:\TABLE\test>npm create vuelatestVue.js - The Progressive JavaScript Framework√ 请输入项目名称&#xff1a; ... vue_test √ 是否使用 TypeScript 语法&#xff…

网络安全-真实ip获取伪造与隐藏挖掘

目录 真实ip获取应用层网络层网络连接TOAproxy protocol ip伪造应用层网络层TOA攻击proxy protocol 隐藏代理 挖掘代理多地ping历史DNS解析记录国外主机解析域名网站RSS订阅网络空间搜索引擎 总结参考 本篇文章学习一下如何服务如何获取真实ip&#xff0c;隐藏自己的ip&#xf…

yolov8 tracking编码为web 和 rtsp流输出

1 基础工作 打开cmd 输入 conda env list 输入 conda activate py38 查看 nvidia-smi 查看 nvcc&#xff0c;如下图所示 cuda为11.7 &#xff0c;为确认可以查看program files 下面的cuda 安装&#xff0c;看到11.7 就行了&#xff0c;读者可以自行确认自己的版本。 查看nvid…

【基础】【Python网络爬虫】【2.请求与响应】常用请求报头和常用响应方法

Python网络爬虫基础 爬虫基础请求与相应HTTP/HTTPS 协议HTTP/HTTPS的优缺点HTTP 的缺点HTTPS的优点 请求与响应概述请求请求目标&#xff08;url&#xff09;请求体&#xff08;response&#xff09;常用的请求报头查看请求体&#xff08;requests 模块&#xff09; 响应HTTP响…

PS实现圆角矩形选取

在我们日常的工作当中,经常需要做圆角矩形的图片,因为圆角的图片给人的感觉比较圆润,漂亮,但是PS在这方面显然比较弱智,因此如何做圆角矩形选择,这里给出了两个方法,希望能帮到大家。 进入正题(方法一): 第一步-PS 右上角-打开一张图片 第二步-左列-选择矩形-选择目…

2024新年快乐

今天就不讲题解了&#xff0c;2024年&#xff0c;祝所有博客身体健康&#xff0c;粉丝越多&#xff0c;点赞越高&#xff01;&#xff01;&#xff01; #include<bits/stdc.h> using namespace std; int main(){cout<<"新年快乐!!";return 0&#xff1b;…

【小沐学Python】Python实现免费天气预报获取(OpenWeatherMap)

文章目录 1、简介1.1 工具简介1.2 费用1.3 注册1.4 申请key 2、接口说明2.1 One Call 3.02.2 Current Weather and Forecasts collection2.2.1 API 调用2.2.2 API 参数 2.3 Historical Weather collection2.4 Weather Maps collection2.5 Other weather APIs 3、接口测试3.1 例…

JavaFX:MVC模式学习01-使用PropertyValueFactory将模型与视图绑定

PropertyValueFactory类是“TableColumn cell value factory”,绑定创建列表中的项。示例如下&#xff1a; TableColumn<Person,String> firstNameCol new TableColumn<Person,String>("First Name");firstNameCol.setCellValueFactory(new PropertyVal…