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

JavaWeb Web基础

SpringBoot Web入门

 

 Spring Boot只是简化了Spring项目的配置,其底层还是Spring Framework

创建步骤

注意:

语言选择Java,类型选择Maven,JDK和Java要保持一致,打包方式为Jar

点击下一步

选择Spring Boot的版本,注意不要选择后面带(SNAPSHOT)的版本 

配置依赖项,可以再搜索框搜索依赖项名称进行查找,配置完后点击创建。

Spring官方脚手架连接不上解决方案

直接将URl地址换成阿里云的骨架

入门解析

HTTP协议

概述

请求协议

请求数据格式

post方式有请求体,而get方式没有请求体

服务区获取请求分为以下几个步骤 

1.获取请求方式
2.获取请求url地址
3.获取请求协议
4.获取请求参数
5.获取请求头 

响应协议

响应数据格式

响应数据格式分为响应行,响应头,响应体三部分

状态码

其中3XX表示重定向

即浏览器响应如3xx(Location:B)的状态码时,再次发起一次请求,请求B服务器,底层涉及到两次请求响应。

常见状态码

响应数据设置

分为两种方式 

SpringBootWeb案例

在项目开发中,对于基本类型,我们建议使用包装类

可以添加Lombok依赖项,可以直接通过注解简化Java的样板代码,如:

@Data,提供get和set方法;

@NoArgsConstructor,提供无参构造

@AllArgsConstructor,提供全参构造

 


分层解耦

我们在进行软件设计或软件开发的时候,尽量遵循单一职责原则。

单一职责原则:一个类或一个方法,就只做一件事情,只管一块功能。

这样就可以让类、接口、方法的复杂度更低,可读性更强,扩展性更好,也更利于后期的维护。

三层架构

控制层(Controller)

controller:控制层,接收前端发送的请求,对请求进行处理,并响应数据

业务逻辑层(Service)

service:业务逻辑层,处理具体的业务逻辑,

数据访问层(Dao)

dao:数据访问层(Data Access 0bject)(持久层),负责数据访问操作,包括数据的增、删、改、查。

  • 前端发起的请求,由Controller层接收(Controller响应数据给前端)

  • Controller层调用Service层来进行逻辑处理(Service层处理完后,把处理结果返回给Controller层)

  • Serivce层调用Dao层(逻辑处理过程中需要用到的一些数据要从Dao层获取)

  • Dao层操作文件中的数据(Dao拿到的数据会返回给Service层)

分层解耦

  • 内聚:软件中各个功能模块内部的功能联系。

  • 耦合:衡量软件中各个层/模块之间的依赖、关联的程度。

  • 软件设计原则:高内聚低耦合。

    高内聚:指的是一个模块中各个元素之间的联系的紧密程度,如果各个元素(语句、程序段)之间的联系程度越高,则内聚性越高,即 "高内聚"。

    低耦合:指的是软件中各个层、模块之间的依赖关联程序越低越好。

关于解耦我们的解决思路是:

  • 提供一个容器,容器中存储一些对象(例:UserService对象)

  • Controller程序从容器中获取UserService类型的对象

我们想要实现上述解耦操作,就涉及到Spring中的两个核心概念:IOC和DI

IOC&DI入门

  • 控制反转: Inversion Of Control,简称IOC。对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。

    • 对象的创建权由程序员主动创建转移到容器(由容器创建、管理对象)。这个容器称为:IOC容器或Spring容器。

  • 依赖注入: Dependency Injection,简称DI。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。

    • 程序运行时需要某个资源,此时容器就为其提供这个资源。

    • 例:EmpController程序运行时需要EmpService对象,Spring容器就为其提供并注入EmpService对象。

  • bean对象:IOC容器中创建、管理的对象,称之为:bean对象。

在实现类加上 @Component 注解,就代表把当前类产生的对象交给IOC容器管理。

用@Autowired为Controller 及 Service注入运行时所依赖的对象

IOC详解

Spring框架为了更好的标识web应用程序开发当中,bean对象到底归属于哪一层,又提供了@Component的衍生注解:

  • 前面声明bean的四大注解,要想生效,还需要被组件扫描注解 @ComponentScan 扫描。

  • 该注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解 @SpringBootApplication 中,默认扫描的范围是启动类所在包及其子包。

  • 所以,我们在项目开发中,只需要按照如上项目结构,将项目中的所有的业务类,都放在启动类所在包的子包中,就无需考虑组件扫描问题。

 

DI详解

1.属性注入

  • 优点:代码简洁、方便快速开发。

  • 缺点:隐藏了类之间的依赖关系、可能会破坏类的封装性。

2.构造函数注入

  • 优点:能清晰地看到类的依赖关系、提高了代码的安全性。

  • 缺点:代码繁琐、如果构造参数过多,可能会导致构造函数臃肿。

  • 注意:如果只有一个构造函数,@Autowired注解可以省略。(通常来说,也只有一个构造函数)

3.setter注入

  • 优点:保持了类的封装性,依赖关系更清晰。

  • 缺点:需要额外编写setter方法,增加了代码量。

在项目开发中,基于@Autowired进行依赖注入时,基本都是第一种和第二种方式。(官方推荐第二种方式,因为会更加规范)但是在企业项目开发中,很多的项目中,也会选择第一种方式因为更加简洁、高效(在规范性方面进行了妥协)。

那如果在IOC容器中,存在多个相同类型的bean对象就会出现报错

 

方案一:使用@Primary注解

当存在多个相同类型的Bean注入时,加上@Primary注解,来确定默认的实现。

方案二:使用@Qualifier注解

指定当前要注入的bean对象。 在@Qualifier的value属性中,指定注入的bean的名称。 @Qualifier注解不能单独使用,必须配合@Autowired使用。

方案三:使用@Resource注解

是按照bean的名称进行注入。通过name属性指定要注入的bean的名称。

面试题:@Autowird 与 @Resource的区别

  • @Autowired 是spring框架提供的注解,而@Resource是JDK提供的注解

  • @Autowired 默认是按照类型注入,而@Resource是按照名称注入

http://www.xdnf.cn/news/8060.html

相关文章:

  • 零碳办会新范式!第十届国际贸易发展论坛——生物能源和可持续发展专场,在京举办
  • 前端性能优化方案
  • 亚马逊英国站海关新规深度解读与合规指南
  • 中级统计师-统计学基础知识-第六章 回归分析
  • 快速部起一个Openwhisk平台,使用telego k8s服务部署能力内网部署
  • 中小制造企业网络安全防护指南
  • Linux Docker下安装tomcat
  • Spring3+Vue3项目中的知识点——跨域与解决方案
  • Gartner《如果有效评估Generative AI项目的投资回报》学习心得
  • DeepSeek快速搭建个人网页
  • vue3基本介绍
  • 220V转1.25V-12V输出电路Multisim仿真
  • 【设计模式】责任链+模板+工程模式使用模板
  • indicator-sysmonitor 在Ubuntu 右上角实时显示CPU/MEM/NET的利用率
  • C#对集合进行分组IGroupingout TKey, out TElement>
  • 01. Qt介绍及Qt开发环境搭建(2025.05最新官网下载方式)
  • C++初阶-list的使用2
  • AI编程: OpenAI Codex vs Google Jules vs GitHub Copilot++
  • 5G 核心网切换机制全解析:XN、N2 与移动性注册对比
  • 初步尝试AI应用开发平台——Dify的本地部署和应用开发
  • 精益数据分析(77/126):问题-解决方案画布——创业团队的周度聚焦与迭代利器
  • GuzzleHttp和DomCrawler的具体用途?
  • HJ33 整数与IP地址间的转换【牛客网】
  • Flutter生物识别认证之Flutter指纹认证Flutter人脸认证
  • 养生指南:五维守护身心健康
  • HTML应用指南:利用POST请求获取全国中通快递服务网点位置信息
  • 【大模型面试每日一题】Day 26:从伦理角度,大模型可能存在哪些潜在风险?技术上如何实现内容安全控制(如RLHF、红队测试)?
  • JVM 高质量面试题
  • 利用GeoTools实现导出MySQL地理数据表为shp格式
  • Spring Task