框架学习之spring学习笔记(一)

一、框架前言

1-什么是spring框架,有哪些主要模块?

        Spring 框架是一个专门针对于 Java 应用程序开发,并提供了综合、广泛的基础性支持的轻量级框架。Spring框架使用目的是为了提高开发人员的开发效率以及系统的可维护性。

        Spring 是以IoCAOP模块为核心,帮助开发者解决了开发中基础性的问题(例如对象管理,事务管理等等),使得开发人员可以专注于业务层面的开发。

        Spring 框架本身亦是按照设计模式精心打造,这使得我们可以在开发环境中安心的集成 Spring 框架,不必担心 Spring 是如何在后台进行工作的。

我们一般说的Spring框架就是Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发。这些模块是核心容器、数据访问/集成、WebAOP(面向切面编程)、工具、消息和测试模块。

 如图所示:

 5.0以后去除了portlet组件

同时增加了异步响应式处理的WebFlex组件

重要的组件有:

        Core是核心组件,是spring中所有组件的核心

        Beans和Context是实现Spring IoC控制反转(依赖注入)的基础

        AOP组件用来做面向切面编程

Web组件实现了Web层(web开发的表现层)的实现,代表延伸技术就是SpringMVC框架

其他的组件我们可以稍作了解

        例如:

                JDBC:Java数据库连接的服务

                JMS:Java消息服务

                ORM:用于支持其他第三方持久层框架(mybatis,hibernate)的工具

 2-总体技术体系

1)单一架构

一个项目,一个工程,导出为一个war包,在一个Tomcat上运行。也叫all in one。

单一架构,项目主要应用技术框架为:Spring , SpringMVC , Mybatis等

 2)分布式架构

一个项目(对应 IDEA 中的一个 project),拆分成很多个模块,每个模块是一个 IDEA 中的一个 module。每一个工程都是运行在自己的 Tomcat 上。模块之间可以互相调用。每一个模块内部可以看成是一个单一架构的应用。

分布式架构,项目主要应用技术框架:SpringBoot , SpringCloud , 中间件等

3-框架概念和理解

框架( Framework )是一个集成了基本结构、规范、设计模式、编程语言和程序库等基础组件的软件系统,它可以用来构建更高级别的应用程序。框架的设计和实现旨在解决特定领域中的常见问题,帮助开发人员更高效、更稳定地实现软件开发目标。

1)框架的优点

  1. 提高开发效率:框架提供了许多预先设计好了的组件和工具,能够帮助开发人员快速进行开发。相较于传统手写代码,在框架提供的规范化环境中,开发者可以更快地实现项目的各种要求。

  2. 降低开发成本:框架的提供标准化的编程语言、数据操作等代码片段,避免了重复开发的问题,降低了开发成本,提供深度优化的系统,降低了维护成本,增强了系统的可靠性。

  3. 提高应用程序的稳定性:框架通常经过了很长时间的开发和测试,其中的许多组件、代码片段和设计模式都得到了验证。重复利用这些组件有助于减少bug的出现,从而提高了应用程序的稳定性。

  4. 提供标准化的解决方案:框架通常是针对某个特定领域的,通过提供标准化的解决方案,可以为开发人员提供一种共同的语言和思想基础,有助于更好地沟通和协作。

2)框架的缺点

  1. 学习成本高:框架通常具有特定的语言和编程范式。对于开发人员而言,需要花费时间学习其背后的架构、模式和逻辑,这对于新手而言可能会耗费较长时间。

  2. 可能存在局限性:虽然框架提高了开发效率并可以帮助开发人员解决常见问题,但是在某些情况下,特定的应用需求可能超出框架的范围,从而导致应用程序无法满足要求。开发人员可能需要更多的控制权和自由度,同时需要在框架和应用程序之间进行权衡取舍。

  3. 版本变更和兼容性问题:框架的版本发布和迭代通常会导致代码库的大规模变更,进而导致应用程序出现兼容性问题和漏洞。当框架变更时,需要考虑框架是否向下兼容,以及如何进行适当的测试、迁移和升级。

  4. 架构风险:框架涉及到很多抽象和概念,如果开发者没有足够的理解和掌握其架构,可能会导致系统出现设计和架构缺陷,从而影响系统的健康性和安全性。

 

站在文件结构的角度去理解框架,可以将框架总结为:

框架=jar包+配置文件

 

莎士比亚说,"一千个观众眼中有一千个哈姆雷特" 即仁者见仁,智者见智.说每个人都会对作品有不同的理解,每个人对待任何事物都有自己的看法,同样的技术解决同样的问题会产生不同流程和风格的解决方案,而采用一种框架其实就是限制用户必须使用其规定的方案来实现,可以降低程序员之间沟通以及日后维护的成本!

常用的单一架构JavaEE项目框架演进,从SSH、SSH2过渡到了SSM:SpringMVC、Spring、MyBatis。

总之,框架已经对基础的代码进行了封装并提供相应的API,开发者在使用框架是直接调用封装好的API可以省去很多代码编写,从而提高工作效率和开发速度。

4-总结

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。

二、SpringFramework简介

1-Spring和SpringFramework

Spring | Projects

广义的 Spring:Spring 技术栈(全家桶)

广义上的 Spring 泛指以 Spring Framework 为基础的 Spring 技术栈。

经过十多年的发展,Spring 已经不再是一个单纯的应用框架,而是逐渐发展成为一个由多个不同子项目(模块)组成的成熟技术,例如 Spring Framework、Spring MVC、SpringBoot、Spring Cloud、Spring Data、Spring Security 等,其中 Spring Framework 是其他子项目的基础。

这些子项目涵盖了从企业级应用开发到云计算等各方面的内容,能够帮助开发人员解决软件发展过程中不断产生的各种实际问题,给开发人员带来了更好的开发体验。

狭义的 Spring:Spring Framework(基础框架)

狭义的 Spring 特指 Spring Framework,通常我们将它称为 Spring 框架。

Spring Framework(Spring框架)是一个开源的应用程序框架,由SpringSource公司开发,最初是为了解决企业级开发中各种常见问题而创建的。它提供了很多功能,例如:依赖注入(Dependency Injection)、面向切面编程(AOP)、声明式事务管理(TX)等。其主要目标是使企业级应用程序的开发变得更加简单和快速,并且Spring框架被广泛应用于Java企业开发领域。

Spring全家桶的其他框架都是以SpringFramework框架为基础!

 

2-SpringFramework主要功能模块

功能模块功能介绍
Core Container核心容器,控制反转和依赖注入
AOP&Aspects面向切面编程
TX声明式事务管理
Testing快速整合测试环境
Data Access/Integration提供了对数据访问/集成的功能。
Spring MVC提供了面向Web应用程序的集成功能。

3-SpringFramework的主要优势

  1. 丰富的生态系统:Spring 生态系统非常丰富,支持许多模块和库,如 Spring Boot、Spring Security、Spring Cloud 等等,可以帮助开发人员快速构建高可靠性的企业应用程序。

  2. 模块化的设计:框架组件之间的松散耦合和模块化设计使得 Spring Framework 具有良好的可重用性、可扩展性和可维护性。开发人员可以轻松地选择自己需要的模块,根据自己的需求进行开发。

  3. 简化 Java 开发:Spring Framework 简化了 Java 开发,提供了各种工具和 API,可以降低开发复杂度和学习成本。同时,Spring Framework 支持各种应用场景,包括 Web 应用程序、RESTful API、消息传递、批处理等等。

  4. 不断创新和发展:Spring Framework 开发团队一直在不断创新和发展,保持与最新技术的接轨,为开发人员提供更加先进和优秀的工具和框架。

因此,这些优点使得 Spring Framework 成为了一个稳定、可靠、且创新的框架,为企业级 Java 开发提供了一站式的解决方案。

Spring 使创建 Java 企业应用程序变得容易。它提供了在企业环境中采用 Java 语言所需的一切,支持 Groovy 和 Kotlin 作为 JVM 上的替代语言,并且可以根据应用程序的需求灵活地创建多种架构。从Spring Framework 6.0开始,Spring 需要 Java 17+。

三、Spring IoC 容器概念

1-组件和组件管理的概念

1)什么是组件

常规的三层架构处理请求流程:

2) Spring充当组件管理角色(IoC)!

 我们的期待?

  • 有人替我们创建组件的对象

  • 有人帮我们保存组件的对象

  • 有人帮助我们自动组装

  • 有人替我们管理事务

  • 有人协助我们整合其他框架

  • ......

那么谁帮我们完成我们的期待,帮我们管理组件呢?

当然是Spring 框架了!

组件可以完全交给Spring 框架进行管理,Spring框架替代了程序员原有的new对象和对象属性赋值动作等!

Spring具体的组件管理动作包含:

-   组件对象实例化
-   组件属性属性赋值
-   组件对象之间引用
-   组件对象存活周期管理
-   ......
    我们只需要编写元数据(配置文件)告知Spring 管理哪些类组件和他们的管理即可!
    注意:组件是映射到应用程序中所有可重用组件的Java对象,应该是可复用的功能对象!

  组件一定是对象,但是对象不一定是组件

  综上所述,Spring 充当一个组件容器,创建、管理、存储组件,减少了我们的编码压力,让我们更加专注进行业务编写!

3)组件交给Spring管理的优势?

1.  降低了组件之间的耦合性:Spring IoC容器通过依赖注入机制,将组件之间的依赖关系削弱,减少了程序组件之间的耦合性,使得组件更加松散地耦合。


2.  提高了代码的可重用性和可维护性:将组件的实例化过程、依赖关系的管理等功能交给Spring IoC容器处理,使得组件代码更加模块化、可重用、更易于维护。


3.  方便了配置和管理:Spring IoC容器通过XML文件或者注解,轻松的对组件进行配置和管理,使得组件的切换、替换等操作更加的方便和快捷。


4.  交给Spring管理的对象(组件),方可享受Spring框架的其他功能(AOP,声明式事务管理)等

 2-Spring IoC容器和容器实现

1)普通和复杂容器

普通容器:生活中的普通容器

 该容器只能用来存储,没有更多功能。

程序中的普通容器:数组、集合(List、Set),只能存储,不能管理和回调,

复杂容器:生活中的复杂容器

政府管理我们的一生,生老病死都和政府有关。

程序中的复杂容器 Servlet 容器能够管理 Servlet、Filter、Listener 这样的组件的一生,所以它是一个复杂容器。

 我们即将要学习的 IOC 容器也是一个复杂容器。它们不仅要负责创建组件的对象、存储组件的对象,还要负责调用组件的方法让它们工作,最终在特定情况下销毁组件。

总结一下:

        Spring管理组件的容器,就是一个复杂容器,不仅存储组件,也可以管理组件之间依赖关系,并且创建和销毁组件等!

2)SpringIoC容器介绍

Spring IoC 容器,负责实例化、配置和组装 bean(组件)。容器通过读取配置元数据来获取有关要实例化、配置和组装哪些对象的指令。配置元数据以 XML、Java 注释或 Java 代码表示。它允许您表达组成应用程序的对象以及这些对象之间丰富的相互依赖关系。

下图显示了 Spring 容器工作原理的高级视图。应用程序类与配置元数据相结合,您拥有完全配置且可执行的系统或应用程序。

 3)SpringIoC容器接口和实现类

Springloc容器接口:

BeanFactory 接口提供了一种高级配置机制,能够管理任何类型的对象,它是SpringIoC容器标准化超接口!

ApplicationContext 是 BeanFactory 的子接口。它扩展了以下功能:

        - 更容易与 Spring 的 AOP 功能集成
        - 消息资源处理(用于国际化)
        - 特定于应用程序给予此接口实现,例如Web 应用程序的 `WebApplicationContext`

简而言之, BeanFactory提供了配置框架和基本功能,而 ApplicationContext添加了更多特定于企业的功能。 ApplicationContextBeanFactory的完整超集!

ApplicationContext容器实现类

 常用的就是这四个

类型名简介
ClassPathXmlApplicationContext通过读取类路径下的 XML 格式的配置文件创建 IOC 容器对象
FileSystemXmlApplicationContext通过文件系统路径读取 XML 格式的配置文件创建 IOC 容器对象
ConfigurableApplicationContextApplicationContext 的子接口,包含一些扩展方法 refresh() 和 close() ,让 ApplicationContext 具有启动、关闭和刷新上下文的能力。
WebApplicationContext专门为 Web 应用准备,基于 Web 环境创建 IOC 容器对象,并将对象引入存入 ServletContext 域中。

 具体图示

4)SpringIoC容器管理配置方式

Spring IoC 容器使用一种形式的配置元数据。此配置元数据表示您作为应用程序开发人员如何告诉 Spring 容器实例化、配置和组装应用程序中的对象。

Spring框架提供了多种配置方式:XML配置方式注解方式Java配置类方式

        1.  XML配置方式:是Spring框架最早的配置方式之一,通过在XML文件中定义Bean及其依赖关系、Bean的作用域等信息,让Spring IoC容器来管理Bean之间的依赖关系。该方式从Spring框架的第一版开始提供支持。


        2.  注解方式:从Spring 2.5版本开始提供支持,可以通过在Bean类上使用注解来代替XML配置文件中的配置信息。通过在Bean类上加上相应的注解(如@Component, @Service, @Autowired等),将Bean注册到Spring IoC容器中,这样Spring IoC容器就可以管理这些Bean之间的依赖关系。


        3.  Java配置类方式:从Spring 3.0版本开始提供支持,通过Java类来定义Bean、Bean之间的依赖关系和配置信息,从而代替XML配置文件的方式。Java配置类是一种使用Java编写配置信息的方式,通过@Configuration、@Bean等注解来实现Bean和依赖关系的配置。

配置方式的使用场景不同,SSM期间,我们使用XML+注解方式为主。SpringBoot期间,我们使用配置类+注解方式为主!

3-Spring IoC / DI概念总结

loC 容器

Spring loC 容器,负责实例化、配置和组装 bean(组件)核心容器。容器通过读取配置元数据来获取有关要实例化、配置和组装组件的指令。

IoC(Inversion of Control)控制反转

  IoC 主要是针对对象的创建和调用控制而言的,也就是说,当应用程序需要使用一个对象时,不再是应用程序直接创建该对象,而是由 IoC 容器来创建和管理,即控制权由应用程序转移到 IoC 容器中,也就是“反转”了控制权。这种方式基本上是通过依赖查找的方式来实现的,即 IoC 容器维护着构成应用程序的对象,并负责创建这些对象。

DI (Dependency Injection)依赖注入

  DI 是指在组件之间传递依赖关系的过程中,将依赖关系在容器内部进行处理,这样就不必在应用程序代码中硬编码对象之间的依赖关系,实现了对象之间的解耦合。在 Spring 中,DI 是通过 XML 配置文件或注解的方式实现的。

它提供了三种形式的依赖注入:构造函数注入、Setter 方法注入和接口注入。

两个操作都发生在Spring容器里

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

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

相关文章

linux的UDP广播测试:C语言代码

测试代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h>#…

解决:安装MySQL 5.7 的时候报错:unknown variable ‘mysqlx_port=0.0‘

目录 1. 背景2. 解决步骤 1. 背景 吐槽1&#xff0c;没被收购之前可以随便下载&#xff0c;现在下载要注册登录吐槽2&#xff0c;5.7安装到初始化数据库的时候就会报错&#xff0c;而8.x的可以一镜到底&#xff0c;一开始以为是国区的特色问题&#xff0c;google了一圈&#x…

重学java 70.IO流 Commons-io工具包

所有人都不看好你&#xff0c;可你偏偏最争气 —— 24.6.14 一、介绍 IO技术开发中&#xff0c;代码量很大&#xff0c;而且代码的重复率较高。如果我们要遍历目录&#xff0c;拷贝自录就需要使用方法的递归调用&#xff0c;也增大了程序的复杂度。 二、添加第三方jar包 1.ja…

Windows MySQL_8.4.0 Navicat报错代码1251不支持认证协议解决方案

Windows MySQL_8.4.0 Navicat报错代码1251不支持认证协议解决方案 前言&#xff1a; Navicat for MySQL 是管理和开发 MySQL 或 MariaDB 的理想解决方案。它是一套单一的应用程序&#xff0c;能同时连接 MySQL 和 MariaDB 数据库&#xff0c;并与 OceanBase 数据库及 Amazon RD…

旅游网站(携程旅行网页学习 vue3+element)

旅游网站 1. 创建项目 在你要创建项目的路径下打开vscode&#xff0c;新建终端&#xff0c;然后输入vue ui,进入Vue项目管理器。选择“创建”&#xff0c;确定项目路径&#xff0c;并点击“在此创建新项目”。在项目文件夹中输入项目名称&#xff0c;点击下一步&#xff1b;选…

经纬恒润助力微宏动力荣获ISO/SAE 21434网络安全流程认证证书

近日&#xff0c;经纬恒润与微宏动力合作的网络安全开发及认证项目顺利完成了阶段性里程碑。作为一家全球化的新能源及储电技术产品及解决方案供应商&#xff0c;微宏动力成功获得了由国际独立第三方检测、检验和认证机构UL Solutions授予的ISO/SAE 21434网络安全流程认证证书。…

社区团购系统搭建部署 :便捷高效,连接消费者与商家新篇章

一、前言 随着科技的快速发展和互联网的普及&#xff0c;社区团购系统作为一种新型的购物模式&#xff0c;正以其便捷高效的特性&#xff0c;逐渐改变着消费者和商家的互动方式。社区团购系统为商家提供丰富的营销活动和便捷高效的门店管理体系&#xff0c;为消费者提供真正实惠…

分享:2024年怎么做选品师项目才能赚钱?

在2024年&#xff0c;成为一名成功的选品师并赚钱&#xff0c;需要明确的策略和行动步骤。选品师作为电商行业中的关键角色&#xff0c;负责选择和管理产品库存&#xff0c;直接影响到销售和利润。以下是一些关键步骤&#xff0c;帮助您在这个领域取得成功。 1. 熟悉市场趋势和…

18、24年--信息系统工程——系统集成

1、集成基础 系统集成的工作再信息系统项目建设中非常重要,它通过硬件平台、网络通信平台、数据库平台、工具平台、应用软件平台将各类资源有机、高效地集成到一起,形成一个完整的工作台面。系统集成工作的好坏对系统开发、维护有极大的影响。因此,在技术上需要遵循的基本原…

labelme安装(通过anaconda)

1.下载安装anaconda 2.安装完成后打开&#xff0c;在环境页里面创建环境 选择3.6.13版本&#xff0c;然后运行 3.安装labelme pip install labelme -i https://pypi.tuna.tsinghua.edu.cn/simple 使用上面命令加速一下 4.labelme打开并标注 总结&#xff1a;现在版本越来越多…

WordPress如何删除内存中的缓存?

今天boke112百科将某篇文章修改分类和内容更新后&#xff0c;发现文章底部的相关文章显示的内容跟文章分类、标签毫无关系&#xff0c;还是显示原来的旧内容。后来查看YIA主题相关文章的代码&#xff0c;才发现相关文章的数据保存到内存中的&#xff0c;而且是永不过期&#xf…

SAP BW:传输转换源系统-源系统映射关系

最近有朋友再问问我源系统映射关系怎么配置&#xff0c;想着写一个怕以后忘了。 简单说下这个是干嘛的&#xff0c;其实就是配置一个源系统到目标系统的一个映射&#xff0c;这样传输的时候才知道传过来的数据源要变成目标系统的数据源。 比如下图&#xff0c;在开发环境&…

视频去水印用哪个软件

在数字化时代的浪潮中&#xff0c;视频内容已成为我们生活中不可或缺的一部分。然而&#xff0c;随着视频的广泛传播&#xff0c;水印问题也逐渐浮出水面。水印影响了视频的美观度&#xff0c;本文将为您详细介绍视频去水印的常用方法&#xff0c;帮助您轻松解决水印问题。 搜索…

pytest中失败用例重跑

pip install pytest-rerunfailures 下载rerunfailures插件包 配置文件中加入命令 --reruns 次数 也可在命令行中pytest --rerun-failures2 可以在allure报告中看到重试效果

利用穿戴甲虚拟试戴技术提高销量和参与度

在不断变化的美容行业&#xff0c;保持领先意味着拥抱创新技术。其中一项改变游戏规则的技术是人工智能驱动的虚拟指甲试戴。在穿戴甲领域&#xff0c;不断兴起的虚拟试戴技术对促进销售和参与度产生了重大影响。 视觉吸引力的力量 要了解虚拟试戴的重要性&#xff0c;必须了解…

【2024重启篇】ESP32的乱搞系列

按视频教程看自己能不能做成功&#xff08;问题多多博客&#xff09; 现在时间2024.6.13日 手头上有2022年到手的&#xff1a; ESP32-S&#xff08;双核&#xff09;的ESP32-CAM摄像头SD卡板1块&#xff08;还有一块收藏了&#xff09;。 ESP8266&#xff08;是单核&#xff0…

Axure中继器交互效果

部件库预览链接&#xff1a; https://ezd11a.axshare.com&#xff08;请与班主任联系获取原型文档&#xff09; 支持版本: Axrure RP 8 文件大小: 109KB 文档内容介绍 “翻页”效果 “排序”效果 “全反选”效果 “筛选”效果 “删除”效果 免费领取资料 添加班主任回复 “…

Guitar Pro 8中文版安装包下载及安装教程

Guitar Pro是一款倍受吉他手喜爱的吉他和弦、六线谱、BASS四线谱绘制、打印、查看、试听软件&#xff0c;它也是一款优秀的MIDI音序器&#xff0c;MIDI制作辅助工具&#xff0c;可以输出标准格式的MIDI。 GP的过人之处就在于它可以直接用鼠标和键盘按标准的六线谱、四线谱进行…

OpenCV读取和显示和保存图像

# 导入 OpenCV import cv2 as cv # 读取图像 image cv.imread(F:\\mytupian\\xihuduanqiao.jpg) # 创建窗口 #显示图像后&#xff0c;允许用户随意调整窗口大小 cv.namedWindow(image, cv.WINDOW_NORMAL) # 显示图像 cv.imshow(image, image)# 将图像保存到文件 success cv…

vue2 + element-ui,前端配置化表单封装(2024-06-14)

技术栈是 vue2 element-ui&#xff0c;主要能解决的问题就是 提高代码复用能力、提升开发效率&#xff0c;特别是需要开发多个大型表单系统的&#xff0c;配置化可以极大的提升效率&#xff0c;让你上班摸鱼不再是梦想&#xff01;为了早点下班&#xff0c;我们接着往下看吧&a…