
文章目录Spring全家桶Spring是什么Springboot是什么Springboot项目创建Springboot官网创建IDEA创建现存版本IDEA创建旧jdk版本项目自动配置原理分析springboot项目启动yml配置文件多种配置文件配置文件效果BeanREST API具体内容RowMapper接口BaseMapper接口Spring全家桶webSpringWebMVC、SpringMVC、SpringWebFlux持久层SpringData、SpringDataJPA、SpringDataRedis、SpringDataMongoDB安全校验SpringSecurity构建工程脚手架SpringBoot微服务SpringCloudSpring是什么是什么 是一个轻量级的开源框架是为解决企业应用开发的复杂性而创建的 采用三层架构实现表现层SpringMVC、业务层Spring的IoC、持久层Spring的JDBC、ORM、Mybatis等持久层框架 本质核心是控制反转IOC、依赖注入DI和面向切面编程AOP 三层架构MVC架构 表现层SpringMVC负责接受客户端的请求向客户端发送请求结果SpringMVC是一种常见的软件设计模式用于将应用程序的逻辑分离视图、模型、控制器三个组件 视图负责展示数据给用户并接收用户的输入 模型应用程序的数据和业务逻辑的表示。它负责处理数据的读取、存储和操作以及业务规则的处理 控制器是模型和视图之间的协调者将用户的请求转发给模型进行处理并将处理结果传递给视图进行展示 业务层Spring的IoC负责项目业务逻辑处理IOC设计思想将对象的创建的权利和对象的声明周期的管理过程交给Spring框架来处理 谁控制谁IOC容器控制对象创建 为何反转 正转对象a直接获取依赖对象b 反转容器帮我们查找及注入依赖对象对象a被动接受依赖对象b 持久层Spring的JDBC、ORM、Mybatis等持久层框架访问数据层将数据持久化到数据库Mybatis是一个开源的、轻量级的持久层框架不仅免除了JDBC代码、设置参数以及获取结果集的工作而且支持自定义SQL、存储过程以及高级映射实现方式仅通过简单的XML或注解来配置和映射原始类型、接口以及JavaPOJO作为数据库中的记录。 注POJO普通Java对象PlainOldJavaObjectSpringboot是什么约定大于配置约定大于配置 “约定大于配置”ConventionOverConfiguration简称CoC是软件工程领域的一种设计理念尤其在现代Web框架中广泛采用SpringBoot便是其中的典范。这一理念主张在设计框架或系统时开发者应当遵循预设的约定而无需进行大量显式的配置。这样做可以简化开发流程减少配置错误提高开发效率让开发者能更快地专注于业务逻辑的实现。 “约定大于配置”在SpringBoot中的体现 自动配置SpringBoot通过一系列的starter依赖和自动配置类自动为项目添加常见的功能如Web服务、数据库连接、安全控制等而无需手动配置复杂的XML文件或繁琐的Java配置。例如添加spring-boot-starter-web依赖后SpringBoot会自动配置嵌入式Tomcat服务器、SpringMVC框架等。 默认启动类SpringBoot应用程序通常有一个主类标注SpringBootApplication注解这表明该类是应用程序的入口点。SpringBoot会扫描该类及其子包自动发现和配置Bean。开发者不需要显式地指定每个组件的位置。 环境变量和配置文件SpringBoot会自动读取application.properties或application.yml配置文件中的属性以及环境变量用于调整应用的行为而不需要在代码中硬编码配置信息。 内置服务器SpringBoot默认集成了Tomcat、Jetty或Undertow等内嵌服务器开发者无需额外配置服务器即可运行应用。 日志管理SpringBoot会自动配置日志系统如Logback或log4j开发者只需关注日志输出级别和格式而不需要关心具体的日志框架配置。 健康检查和监控SpringBootActuator模块提供了开箱即用的健康检查和应用监控功能无需额外配置即可启用。 实际应用场景 假设你正在构建一个新的SpringBoot项目按照“约定大于配置”的原则你只需要添加必要的starter依赖比如spring-boot-starter-data-jpa和spring-boot-starter-web并定义一些实体类和Repository接口。SpringBoot会自动配置JPA和Web环境包括数据库连接、事务管理、RESTfulAPI支持等而无需编写复杂的配置代码。 总的来说“约定大于配置”使得SpringBoot项目更加简洁、易维护降低了学习和使用的门槛让开发者能够快速上手专注于业务逻辑的实现而非框架配置的细节。 自动装载 需要进一步修改的内容。。。。。TODOSpringBoot的优点帮助所有Spring开发者快速入门 开箱即用提供各种默认配置来简化项目配置 内嵌容器tomact简化web项目 没有冗余代码生成和XML配置的要求Springboot项目创建微服务一种架构风格将开发一个应用变成一系列小服务组合可通过HTTPRPC方式互相通信。单体应用架构将一个应用的所有应用服务都封装在一个应用中各个功能放在一个war包里。微服务架构将每个功能元素都独立出来并将独立出来的功能元素动态组合也就是对功能元素的复制而不是整个应用的复制创建一个springboot项目两种方式Springboot官网版本 / IDEA自己创建IDEA集成了这个网站)Springboot官网创建中文文档https://springdoc.cn/spring-boot/官网文档https://spring.io/projects/spring-boot#learnSpringboot 最新版本是3.2.2当前创建页面只支持以下图展示内容IDEA创建现存版本IDEA创建springboot项目文件 – 新建 – 项目 – Spring Initializr通过该方法java版本只有17和21 两种经过验证jdk1.8 与java17不匹配可以和java21匹配项目注意事项SpringbootApplicationspringboot中的启动类是application其他的类都得在该启动类的同级目录下 启动类application程序的主入口本身就是Spring的一个组件 所有springboot的依赖都采用 spring-boot-starter 这个前缀 项目打包packageIDEA创建旧jdk版本项目创建项目遇到的问题 java语言只有17和21版本jdk是1.8如何解决 解决 参考博客https://zhuanlan.zhihu.com/p/668876308该博客的评论部分把项目上面的start.spring.io 改成 start.aliyun.com即可在新建项目的页面修改链接application.properties配置修改# web服务端口号修改 server.portxxx # banner修改 需要在线生成网站处理 https://www.bootschool.net/ascii-art/search 在resource/banner.txt文件 将网站生成的图片放在该文件中。自动配置原理分析1 pom.xml通过spring-boot-starter-parent →spring-boot-dependencies 该包管理的大量的jar包版本2 启动器pom文件中的有大量的启动器含有starter的包也就是springboot的启动场景 主程序SpringBootApplication标注这个类是springboot应用SpringApplication.run方法 启动 springboot项目3 主程序1.主程序SpringBootApplication标注这个类是springboot应用SpringApplication.run方法 启动 springboot项目2.注解SpringBootConfigurationSpringboot的配置ConfigurationSpring配置类Component说明是Spring的一个组件EnableAutoConfiguration自动配置AutoConfigurationPackage自动配置的包Import({Registrar.class})自动装配 包注册Import({AutoConfigurationImportSelector.class})自动配置导入选择ListStringconfigurationsthis.getCandidateConfigurations(annotationMetadata,attributes);// 获取所有的配置结论 springboot所有自动配置都是在启动的时候扫描并加载:spring.factories 所有的自动配置类都在这里面但是不一定生效要判断条件是否成立只要导入了 对应的 start 就有对应的启动器了有了启动器我们自动装配就会生效然后就配置成功!springboot项目启动需要了解清楚点击运行之后的所有内容如何运行启动的yml配置文件springboot配置文件可以写的所有内容https://docs.spring.io/spring-boot/docs 官网地址没有找到https://www.cnblogs.com/tangge/p/9609165.html 博客找到了注意内容1 SpringBoot采用全局配置文件名称是固定的 application.properties keyvalueapplication.yml key:value 2 yml比propreties存放对象更方便 yml student name dahua age 3 propreties student.name dahua student.age 3 3 yml的行内写法 student:{name,age}4 yml存储数组/列表pets:-dog-cat-pig 行内写法 pets:[dog,cat,pig]5 对空格要求极为严格 可以注入到项目的配置类 6 yml可以直接给实体类赋值 核实是ConfigurationProperties ConfigurationProperties作用:将配置文件中配置的每一个属性的值映射到这个组件中; 告诉springBoot将本类中的所有属性和配置文件中相关的配置进行绑定 对应参数 prefix “person” 将配置文件中的person下面的所有属性一一对应 只有这个组件是容器中的组件才能使用容器提供的Configurationproperties功能。 7 指定特殊的配置文件xxx.properties 而不是默认配置文件application.properties PropertySourcevalue “classpathxxx.properties” 类的具体属性前Value(${配置文件中所要设置的值})多种配置文件方式1四个配置文件在相同路径下配置文件所在路径 项目/src/main/resources/application-xxx.yml 配置文件有 application.yml application-dev.yml application-prod.yml application-test.yml 三种配置文件以及一个总的配置文件 application.yml文件内容spring:profiles:active:dev 可以正常启动application-dev.yml配置文件方式2多个配置文件在不同的文件夹下1.yml文件路径 整体路径为resources/config/xxx/application.yml 以及 logback-spring.xml resources/config/mybatis-config.xml 其中xxx一般为resource_dev-本地开发resource_prod-线上环境resource_test-测试环境2.pom.xml配置 需要在配置文件中添加如下内容才可以在idea右侧的界面中出现dev、prod、test的配置信息profilesprofileiddev/idpropertiesprofiles.activedev/profiles.active/properties/profileprofileidtest/idpropertiesprofiles.activetest/profiles.active/properties/profileprofileidprod/idpropertiesprofiles.activeprod/profiles.active/properties!--默认情况--activationactiveByDefaulttrue/activeByDefault/activation/profile/profiles3.本地激活 使用哪个配置文件通过maven选择4.打包激活需要在pom.xml进行配置!--构建配置--buildresourcesresourcedirectorysrc/main/resources/config/directoryexcludes// exclude表示项目打包要排除的配置文件excludedev/*/exclude excludeprod/*/exclude excludetest/*/exclude /excludes /resource resource directorysrc/main/resources/directory includes include**/*.xml/include/includesfilteringtrue/filtering/resourceresourcedirectorysrc/main/resources/config/${profiles.active}/directory/resource/resources// 其中profiles.active参数是前文中提到的配置通过maven选择进行打包配置文件效果# 文件上传multipart/form-data 的配置spring:servlet:multipart:max-file-size:20MB# 单个上传文件的最大大小max-request-size:20MB# 整个 multipart 请求的最大大小BeanREST APIREST定义RESTRepresentationalStateTransfer--》表述/具体的-状态-转移 转移前端与后端之间传递数据 状态前后端传递的数据例如删除某数据传递的不是数据本身而是想要修改的数据成某种状态 表述/具体的修饰StateRESTful定义 xxx-ful 充满/富有xxx的充满了“具体的状态转移” 的API 通过语义化的方式请求资源URL并根据返回的语义来判断这次操作的返回类型和效果 举例前端到后端的整个过程 前端HTML代码通过渲染得到可视化页面点击页面上的按钮-浏览器会发出HTTP请求访问服务端的api接口不是java中的接口 案例代码角度 创建控制类xxController被RequestMappingapi/xxx 编写方法function1、function2.。。。 然后针对不同的方法采用不同的注解GetMapping表示获取PostMapping表示创建PUTMapping表示更新DelectMapping表示删除。具体内容RowMapper接口定义 是Spring框架提供的将数据库查询封装的接口 用来把数据库中的列字段和java bean中属性对应上 即可以将数据中的每一行数据封装成用户定义的类 作用 原生JDBC从数据库查询出来的记录全都被保存在ResultSet结果集中需要将结果集中的数据一条条地获取并设置到具体的实体类上这时就需要RowMapper来处理BaseMapper接口概念 是Mybatis-plus中的利用的Mybatis接口编程的实现机制其默认提供了一系列的增删改查的基础方法并且开发人员对于这些基础操作不需要写SQL进行处理操作。 作用 用于操作数据库