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

[WEB开发] Web基础

一. HTTP

在之前的文章中, 我们已经详细学习过HTTP了.

  • [计算机网络] HTTP/HTTPS

二. Web基础

2.1 spring全家桶

  • spring framework: spring最底层的框架.
    Spring Framework 是一个功能强大的 Java 应用程序框架,旨在提供高效且可扩展的开发环境。它结合了轻量级的容器(IOC)和依赖(DI)注入功能,提供了一种使用 POJO 进行容器配置和面向切面的编程的简单方法,以及一组用于AOP的模块.
  • spring boot: 用来快速的构建spring项目.
    Spring Boot 是由Pivotal团队提供的一套开源框架,可以简化spring应用的创建及部署。它提供了丰富的Spring模块化支持,可以帮助开发者更轻松快捷地构建出企业级应用。Spring Boot通过自动配置功能,降低了复杂性,同时支持基于JVM的多种开源框架,可以缩短开发时间,使开发更加简单和高效。
  • spring cloud: 微服务.
  • spring data: 数据库.
    详细介绍两个, 具体可以参考spring官网和spring中文网.

2.2 SpringWebBoot入门程序

在这里插入图片描述
在这里插入图片描述

  • @SpringBootApplication: 启动类
  • @RestController:请求处理类
  • @RequestMapping: 标记资源路径 (资源路径 = 类路径 + 方法路径)

2.3 面试题: 为什么一个main方法就能将web程序启动?

答: 本质上web程序的启动依赖于web服务器. 调用run方法之后, web服务器tomcat启动, 再把程序部署在tomcat服务器中. web程序就启动了.在这里插入图片描述这其中利用了maven一个非常重要的特性 - 依赖继承性. 只需要在pom.xml文件中引入spring-boot-starter-web依赖就好.
在这里插入图片描述
在这里插入图片描述

2.4 分层解耦

2.4.1 三层架构

  • controller: 接收请求, 响应数据.
  • service: 逻辑处理
  • dao(data access object): 数据访问.
    在这里插入图片描述

2.4.2 IOC

IOC(inversion of controller): 控制反转.
把对象的创建控制权由程序自身转移到了容器.
就是把某个对象交给IOC容器管理.

使用以下注解, 标记将对象交给IOC容器管理:

  • @Component (通用)
  • @Controller (请求响应层controller)
  • @Service (逻辑处理层service)
  • @Repository (数据访问层dao)

但是, 要让以上4个注解生效, 还需要进行组件扫描, 使用到的注解是 @ConponentScan.
注意:

  • @SpringBootApplication 继承了 @Component注解.
  • @Component 组件扫描的范围是: 当前包和当前包的子包.
    在这里插入图片描述

2.4.3 DI

DI(dependency injection): 依赖注入.
容器为应用程序提供运行时所依赖的资源.

基于@Autowired的三种依赖注入方式:

  • 属性注入

    • 在这里插入图片描述
  • 构造函数注入(如果只有一个构造函数, @Autowired可以省略)

    • 在这里插入图片描述
  • set方法注入

    • 在这里插入图片描述

2.4.4 IOC容器中存在多个相同类型Bean, DI如何注入?

在这里插入图片描述

此时不处理多种Bean, 会报如下错误:
在这里插入图片描述

解决:

  • 被@Primary注解的Bean优先注入

    • 在这里插入图片描述
  • @Qualifier 与 @Autowired配合使用, 参数是bean名

    • 在这里插入图片描述
  • @Resource

    • 在这里插入图片描述

2.4.5 @Autowired 与 @Resource的区别

  • @Autowired是spring框架提供的, @Resource是java提供的.

    • 在这里插入图片描述
  • @Autowired是按照类型注入的, @Resource是按照bean名注入的.

相关文章:

  • zero-shot文字分类模型
  • 【数据结构与算法】Java描述:第四节:二叉树
  • 苹果app上架app store 之苹果开发者账户在mac电脑上如何使用钥匙串访问-发行-APP发布证书ios_distribution.cer-优雅草卓伊凡
  • DeepSeek 3FS集群化部署临时笔记
  • Django中的查询条件封装总结
  • 解决 openjtalk.obj : error LNK2001: 无法解析的外部符号 __imp__PySequence_List 错误
  • C语言基础要素(016):入口条件循环:while与for
  • go 通过汇编分析栈布局和函数栈帧
  • SSM文物管理系统
  • chatgpt的一些prompt技巧
  • vue3设置全局滚动条样式
  • 1.5[hardware][day5]
  • 0CTF 2016 piapiapia 1
  • QT MVC 编程 MODEL/DELEGATE/VIEW(五)
  • day04_Java高级
  • OSPF与RIP联动实验
  • Java 并发编程——Java BIO NIO Socket编程
  • cursor全栈网页开发最合适的技术架构和开发语言
  • 进制转换(十进制相关)
  • 1.Qt SDK 的下载和安装
  • A股三大股指涨跌互现:3343股收涨,两市成交超1.1万亿元
  • 中国武术协会原主席张耀庭逝世,曾促成电影《少林寺》拍摄
  • 阿里千问3系列发布并开源:称成本大幅下降,性能超越DeepSeek-R1
  • 新一届中国女排亮相,奥运冠军龚翔宇担任队长
  • 国家发改委答澎湃:力争6月底前下达2025年两重建设和中央预算内投资全部项目清单
  • 一个失败的赛季咎由自取,皇马只能把希望留到夏天