Spring框架介绍与搭建

article/2025/10/27 23:06:26

文章目录

      • 1. 简介
        • 1.1 什么是Spring
        • 1.2 为什么用Spring
        • 1.3 Spring5的特性
      • 2. Spring框架核心
        • 2.1 IOC(控制反转)
        • 2.2 AOP(面向切面编程)
        • 2.3 Spring 中 bean 的作用域
        • 2.4 Spring 中 bean 生命周期
      • 3. Spring快速搭建
        • 3.1 官方提供的搭建方式
        • 3.2 使用IDEA搭建

1. 简介

  • 官方文档: spring.io/projects/spring-framework
  • Github: github.com/spring-projects/spring-framework.git

1.1 什么是Spring

    Spring是一个由Rod Johnson为了解决企业应用开发的复杂性而创建的开源框架。

    它也是一个容器框架,用来装载javabean(java对象),第三方框架(如mybatis),起到一个连接作用,比如说把Struts和hibernate粘合在一起运用。简单来说,Spring是一个轻量级的提供控制反转(IoC)和面向切面(AOP)功能的容器框架。

1.2 为什么用Spring

    Spring框架为现代基于Java的企业应用程序提供了一个全面的编程和配置模型——在任何类型的部署平台上。

    Spring的一个关键元素是应用程序级的基础设施支持:Spring关注企业应用程序的“管道”,这样团队就可以关注应用程序级的业务逻辑,而不必与特定的部署环境建立不必要的联系。

  1. 方便解耦,简化开发

    Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理

  2. AOP编程的支持

    Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能

  3. 声明式事务的支持

    只需要通过配置就可以完成对事务的管理,而无需手动编程

  4. 方便程序的测试

    Spring对Junit4支持,可以通过注解方便的测试Spring程序

  5. 方便集成各种优秀框架

    Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持

  6. 降低JavaEE API的使用难度

    Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低

1.3 Spring5的特性

  • Core
    IoC Container, Events, Resources, i18n, Validation, Data Binding, Type Conversion, SpEL, AOP.

  • Testing
    Mock Objects, TestContext Framework, Spring MVC Test, WebTestClient.

  • Data Access
    Transactions, DAO Support, JDBC, R2DBC, O/R Mapping, XML Marshalling.

  • Web Servlet
    Spring MVC, WebSocket, SockJS, STOMP Messaging.

  • Web Reactive
    Spring WebFlux, WebClient, WebSocket, RSocket.

  • Integration
    Remoting, JMS, JCA, JMX, Email, Tasks, Scheduling, Caching.

  • Languages
    Kotlin, Groovy, Dynamic Languages.

2. Spring框架核心

在这里插入图片描述

  • 具体模块如上图所示,其实Spring 框架中的核心主要有两个,一个是IOC(控制反转),一个是AOP(面向切面编程)。

2.1 IOC(控制反转)

        所谓IOC就是把传统模式中需要自己通过 new 实例化构造函数,或者通过工厂模式实例化的任务交给容器。
        通俗的来理解,就是本来当需要某个类(构造函数)的某个方法时,自己需要主动实例化变为被动,不需要再考虑如何实例化其他依赖的类,只需要依赖注入 (Dependency Injection, 下文统一简称为 DI), DI 是 IOC 的一种实现方式。所谓依赖注入就是由 IOC 容器在运行期间,动态地将某种依赖关系注入到对象之中。所以 IOC和DI,只是从不同的角度的描述的同一件事情,就是通过引入 IOC 容器,利用依赖注入的方式,实现对象之间的解耦。

2.2 AOP(面向切面编程)

        AOP也是一种编程思想,是面向对象编程(OOP)的一种补充。面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将程序抽象成各个切面。
        AOP所要实现的目的为,保证开发者不修改源代码的前提下,去为系统中的一个或多个业务组件添加某种通用功能。

  • AOP 其实就是代理模式的典型应用,按其代理方式的不同可以分为两类:
    • 静态 AOP 实现, AOP 框架在编译阶段对程序源代码进行修改,生成了静态的 AOP 代理类(生成的 *.class 文件已经被改掉了,需要使用特定的编译器),比如 AspectJ。
    • 动态 AOP 实现, AOP 框架在运行阶段对动态生成代理对象(在内存中以 JDK 动态代理,或 CGlib 动态地生成 AOP 代理类),如 SpringAOP。
  • AOP 的特性术语:
    • 通知(Advice): AOP 框架中的增强处理。通知描述了切面何时执行以及如何执行增强处理。
    • 连接点(join point): 连接点表示应用执行过程中能够插入切面的一个点,这个点可以是方法的调用、异常的抛出。在 Spring AOP 中,连接点总是方法的调用。
    • 切点(PointCut): 可以插入增强处理的连接点。
    • 切面(Aspect): 切面是通知和切点的结合。
    • 引入(Introduction):引入允许我们向现有的类添加新的方法或者属性。
    • 织入(Weaving): 将增强处理添加到目标对象中,并创建一个被增强的对象,这个过程就是织入。

2.3 Spring 中 bean 的作用域

singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。
prototype : 每次请求都会创建一个新的 bean 实例。
request : 每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。
session : 每一次HTTP请求都会产生一个新的 bean,该bean仅在当前 HTTP session 内有效。
global-session: 全局session作用域,仅仅在基于portlet的web应用中才有意义,Spring5已经没有了。Portlet是能够生成语义代码(例如:HTML)片段的小型Java Web插件。它们基于portlet容器,可以像servlet一样处理HTTP请求。但是,与 servlet 不同,每个 portlet 都有不同的会话

2.4 Spring 中 bean 生命周期

Bean 容器找到配置文件中 Spring Bean 的定义。
Bean 容器利用 Java Reflection API 创建一个Bean的实例。
如果涉及到一些属性值 利用 set()方法设置一些属性值。
如果 Bean 实现了 BeanNameAware 接口,调用 setBeanName()方法,传入Bean的名字。
如果 Bean 实现了 BeanClassLoaderAware 接口,调用 setBeanClassLoader()方法,传入 ClassLoader对象的实例。
如果Bean实现了 BeanFactoryAware 接口,调用 setBeanClassLoader()方法,传入 ClassLoade r对象的实例。
与上面的类似,如果实现了其他 *.Aware接口,就调用相应的方法。
如果有和加载这个 Bean 的 Spring 容器相关的 BeanPostProcessor 对象,执行postProcessBeforeInitialization() 方法
如果Bean实现了InitializingBean接口,执行afterPropertiesSet()方法。
如果 Bean 在配置文件中的定义包含 init-method 属性,执行指定的方法。
如果有和加载这个 Bean的 Spring 容器相关的 BeanPostProcessor 对象,执行postProcessAfterInitialization() 方法
当要销毁 Bean 的时候,如果 Bean 实现了 DisposableBean 接口,执行 destroy() 方法。
当要销毁 Bean 的时候,如果 Bean 在配置文件中的定义包含 destroy-method 属性,执行指定的方法。
在这里插入图片描述

3. Spring快速搭建

  • 首先确保你的机器上部署好jdk8及以上版本的开发环境。

3.1 官方提供的搭建方式

  • 官方快速构建地址:start.spring.io
    在这里插入图片描述

3.2 使用IDEA搭建

  • File --> New --> Project.
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 最后打开的项目目录结构如下:
    在这里插入图片描述
  • 在你的demo中加入一个controller
@Controller
public class DemoController {@RequestMapping@ResponseBodypublic String hello(){return "hello world!";}}
  • 直接运行DemoApplication的main方法
    在这里插入图片描述

  • 最后打开 localhost:8080 输出如下
    在这里插入图片描述


http://chatgpt.dhexx.cn/article/H340CGXl.shtml

相关文章

Spring框架搭建

Spring是一个轻量级的开源的控制反转(IOC)和面向切面编程(AOP)的框架,是很多程序员必须学的一个框架,所有我们使用他的第一个步骤就是导入框架,本文使用的是idea导入。 Spring有以下几个优点&am…

Python模块——glob模块详解

本文大纲 glob模块也是Python标准库中一个重要的模块,主要用来查找符合特定规则的目录和文件,并将搜索的到的结果返回到一个列表中。使用这个模块最主要的原因就是,该模块支持几个特殊的正则通配符,用起来贼方便,这个…

python—glob模块函数(搜索目录文件)

目录 glob函数 iglob函数 glob模块函数用于从目录通配符搜索中生成文件列表,可以快速获取一定格式的文件夹或文件路径的列表。glob匹配模式较少,一共有三种通配符:*、?、[],属于轻量级。路径分隔符(Unix的/,Windows…

pathlib.Path模块下的glob、rglob,glob模块下的glob、iglob

1、导入所需模块 from pathlib2 import Path import glob2 as gb 2、当前所在路径 # D:\02周报 p Path.cwd()3、比较Path模块中的glob(*)、glob(**)、rglob(*)、rglob(**) # from pathlib2 import Path# D:\02周报 # p Path.cwd()type(p.glob(r"*")) print("P…

python中的glob.glob()(包含详细实例)

在网上搜了半天没搜到满意的解释,最终选择去原英文文档里寻找其释义,具体如下: glob.glob(pathname, *, root_dirNone, dir_fdNone, recursiveFalse) 其功能是返回一个与pathname匹配的路径名列表(该列表可以为空,必…

python 的标准库模块glob使用教程,主要为glob.glob()使用与glob.iglob()使用

欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 python 的标准库模块glob使用教程,主要为glob.glob函数使用与glob.iglob函数使用 文章目录: 1 glob模块介绍2 glob模块的具体使用2.1 查…

glob.glob()

glob.glob()函数 glob.glob()含有的内容非常少,其功能是查找符合特定规则的文件路径。例如(F:/Python/Hello)。 功能类似于Windows的文件搜索。 查找文件只用到三个匹配符:" “,”?", “[]”。 " "&#x…

glob函数

查找符合自己要求的文件 glob.glob() 返回一个列表,列表里的元素是符合要求的文件名(字符串) 三个匹配符: ”*”匹配任意0个或多个字符 ”?”匹配任意单个字符 ”[ ]”匹配指定范围内的字符 例子1: glob.glob(&q…

python 中的 glob.glob()

1. glob方法: glob模块的主要方法就是glob,该方法返回所有匹配的文件路径列表(list); 该方法需要一个参数用来指定匹配的路径字符串(字符串可以为绝对路径也可以为相对路径),其返回的文件名只…

python glob函数_Python glob()函数

Python glob()函数,是种文件通配符,非常常用。glob模块提供了函数用于从目录通配符搜索中生成文件列表: Python glob()函数用法 glob()函数可以查找符合自己要求的文件, 支持通配符操作*,**,?,[]这四个通配符, *代表0个或多个字符…

python glob.glob使用

使用了下thrift,出现了一些路径问题。原来是glob.glob函数捣的鬼。所以扒了下英文文档,有些收获。下面分享。 函数功能:匹配所有的符合条件的文件,并将其以list的形式返回。 一.glob.glob的介绍和一些实现细节 1.glob.glob函数的…

glob.glob() 函数

glob模块是最简单的模块之一,内容非常少。用它可以查找符合特定规则的文件路径名。跟使用windows下的文件搜索差不多。查找文件只用到三个匹配符:””, “?”, “[]”。””匹配0个或多个字符;”?”匹配单个字符;”[]”匹配指定…

python glob.glob()

glob是python的一个标准库函数,它的作用类似于shell的find,但是只能返回一级目录的查找结果,支持通配符来查找某个目录的文件,找到的文件列表以list格式返回,如果目录不存在或者找到结果为空,则返回一个空列…

glob.glob()函数

glob.glob()函数 glob.glob(pathname, *, recursiveFalse) 功能:返回一个某一种文件夹下面的某一类型文件路径列表 pathname:文件路径 例如: 返回某一文件下面的pdf文件 import glob f glob.glob(H:\\paper_of_remote_sensing\\paper_of_lidar\\*.…

Linux杂谈之Glob文件名模式匹配

一 Glob ① 初识 glob 最早是出现在类Unix系统的命令行中,是用来匹配文件路径的1)在最新的 CentOS 7 中已经删除了 glob 的相关描述文档2)删除的原因由于 glob 已经整合到了 shell 之中,然后就有了 shell 通配符常见: 涉及glob的相关命令…

Python 中glob.glob()、glob.iglob()的使用

Python 中glob.glob()的使用 glob.glob(path)的功能: 返回符合path格式的所有文件的路径,以list存储返回。 glob.iglob(path)的功能: 返回符合path格式的一个文件的路径。 path的表示方法: 利用匹配符:"* "…

SSM项目小例子,SSM整合图文详细教程

SSM项目小例子 今天来搭建一个SSM项目的小例子简单练一练,那项目模板还是我们那个模板,就是我们在JavaWeb最后的小例子,那到SSM中我们如何实现,后面我们再看看springboot中如何实现 javaweb中项目例子:https://blog.cs…

SSM整合之登录注册

一、概述 本文以一个登录注册的小功能作为示例,对SSM框架做一个整合。 二、SSM整合 SSM框架是指Spring、SpringMVC和Mybatis,SpringMVC是包含在Spring中的,因此SSM框架整合核心是将Mybatis整合到Spring中。 2.1 DAO 1. 创建如下的数据库表格…

遇见狂神说SSM整合项目梳理详解

在跟B站的狂神学习的时候有一模块是SSM整合的一个小项目,虽然spring、springmvc、mybatis我都学过,但是整合到一起还是思路不清晰,就很懵,整合的一个小项目,让我知道了什么叫配置地狱,就是熟悉又陌生的感觉…

SSM整合Quartz

Quartz 1.整合1.1 mysql中创建quartz表1.2 添加quartz依赖1.3 添加quartz.properties与数据库关联1.4 编写quartzConfig文件1.4.1 quartz的初始化配置1.4.2 创建job 实例工厂 1.5 编写定时任务1.5.1 静态方式编写定时任务1.5.2 动态方式编写定时任务 2.quartz2.1 quartz概念2.2…