Spring核心概念

本文详细介绍了Spring框架的主要模块,包括SpringCore、SpringContext、SpringDAO、SpringORM、SpringAOP和SpringWeb/WebMvc。重点阐述了控制反转和依赖注入,以及它们在简化开发、解耦组件和提高代码灵活性方面的应用。此外,还梳理了SpringWebMvc的请求处理流程,展示了Spring在Web开发中的强大支持。
摘要由CSDN通过智能技术生成

主要模块

  1. Spring Core:这是Spring框架的最基础部分,提供IoC容器,对bean进行管理。
  2. Spring Context:基于bean,提供上下文信息,扩展出JNDI、EJB、电子邮件、国际化、校验和调度等功能。
  3. Spring DAO:提供了JDBC的抽象层,消除冗长的JDBC编码和解析数据库厂商特有的错误代码,还提供了声明性事务管理方法。
  4. Spring ORM:提供了常用的“对象/关系”映射APIs的集成层,包括JPA、JDO、Hibernate、MyBatis等。
  5. Spring AOP:提供了符合AOP Alliance规范的面向切面的编程实现。
  6. Spring Web:提供了基础的Web开发的上下文信息,可与其他web进行集成。
  7. Spring Web MVC:提供了Web应用的Model-View-Controller全功能实现。

这些模块通过各自的功能,为开发者提供了强大的支持,使得开发者可以更加专注于业务逻辑的实现,而不是底层技术的细节。

Spring Core IOC和DI

IOC:Inversion of Control:控制反转
DI:Dependency Injection:依赖注入

控制反转(IoC)不是一种技术,而是一种设计思想。在Java开发中,IoC意味着将设计好的对象交给容器控制,而不是传统的在对象内部直接控制。传统Java SE程序设计中,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由IoC容器来控制对象的创建。
谁控制谁?当然是IoC容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。
反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。

Spring IOC(Inversion of Control)和DI(Dependency Injection)是Spring框架的核心概念,它们共同实现了应用程序中组件之间的解耦和灵活配置

  1. 控制反转(IOC):在传统的应用程序中,对象之间的依赖关系通常是在代码中直接硬编码的。这样会导致对象之间的耦合度过高,不利于代码的维护和扩展。控制反转的思想是将对象的依赖关系交由外部容器来管理,通过配置文件或注解的方式,将依赖关系注入到相应的对象中。这样,对象的创建和依赖关系的配置被外部容器所控制,实现了控制权的反转。
  2. 依赖注入(DI):依赖注入是实现控制反转的一种手段。通过依赖注入,对象的依赖关系可以在运行时动态地注入到对象中,而不需要在代码中直接创建或查找依赖对象。Spring提供了多种依赖注入的方式,包括属性setter方法注入、构造函数注入和注解注入等。通过这些方式,开发者可以在配置文件中定义依赖关系,或者使用注解来描述依赖关系,由Spring容器负责解析和注入相应的依赖。
  3. 容器管理:Spring容器是实现控制反转和依赖注入的核心组件。Spring容器负责创建和管理应用程序中的Bean,包括创建Bean实例、配置属性、注入依赖等。开发者只需要通过简单的配置,就可以将Bean的定义和配置信息交给Spring容器来管理。
  4. 配置管理:Spring容器通过读取配置文件或注解的方式,获取Bean的定义和配置信息。这些配置信息可以是Bean的名称、属性值、依赖关系等。Spring容器根据这些配置信息创建和配置Bean实例,供应用程序使用。

Spring Context

模块在Core和Bean模块的基础上建立起来,主要提供了如下内容

  1. JNDI:JNDI(Java Naming and Directory Interface)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服务供应接口(SPI)的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。在Spring Context中,JNDI与Context模块相结合,提供了更为强大的应用上下文功能。
  2. EJB:EJB是用于构建和管理企业级应用程序的组件模型和规范。它是Java EE规范的一部分,提供了一种标准化的方法来开发分布式、可扩展和事务性的企业应用程序。在Spring Context中,EJB可以被轻松地集成到Spring应用程序上下文中,利用Spring提供的便利性,如依赖注入、事务管理等。
  3. 邮件:Spring提供了发送电子邮件的库,使用这个库可以屏蔽邮件系统的底层细节和客户端的底层资源处理。通过依赖库(如JavaMail的Jar包)的支持,Spring邮件功能可以方便地实现邮件的发送。
  4. 国际化:Spring国际化意味着将程序中的字符串统一写到不同语言的配置文件中,然后在程序运行期间读取不同的配置语言文件,从而获取不同支持语言的字符用于程序中。Spring Context模块支持国际化,提供了对多语言支持的功能。
  5. 校验:Spring提供了一些校验框架的支持,如Hibernate Validator等,这些框架可以用于验证Bean的属性值是否满足特定的约束条件。在Spring Context中,这些校验框架可以方便地与应用程序上下文集成,实现对Bean属性的校验功能。
  6. 调度:Spring提供了任务调度框架,可以方便地实现定时任务或周期性任务的执行。在Spring Context中,任务调度功能可以与应用程序上下文集成,通过配置文件或注解的方式定义调度任务,并由Spring容器负责任务的执行和管理。

Spring DAO

Spring DAO(Data Access Object)是Spring框架中用于简化数据库访问的一种设计模式。它的原理主要是通过依赖注入和接口隔离的方式,将应用程序与底层的数据存取技术隔离开来,达到解耦的目的。

  1. 依赖注入:Spring DAO通过依赖注入的方式,将数据存取接口与具体的实现类分离。开发者只需要关注数据存取接口的定义,而不需要关心底层具体实现。通过XML配置文件或注解的方式,将数据源和数据存取接口的实现类注入到相应的Bean中。
  2. 接口隔离:数据存取接口定义了与特定数据库存取技术无关的方法(如update、insert、delete等),具体的实现细节被封装在DAO实现类中。这样,应用程序代码只需要依赖于数据存取接口,而不需要依赖于具体的实现类。
  3. 异常处理:Spring DAO通过统一的异常体系,将不同持久化技术的异常进行统一处理。当发生异常时,Spring DAO会将这些异常包装为Runtime异常,并向上层业务代码传递。这样,开发者无需捕捉各种数据库访问技术的特定异常,只需要捕获Spring异常即可。
  4. 事务管理:Spring DAO提供了一套统一的事务管理机制,使得开发者可以更加方便地处理事务。通过配置事务管理器,Spring DAO可以自动管理事务的开启、提交和回滚等操作,简化事务处理的过程。
  5. 数据源管理:Spring DAO提供了一套统一的数据源管理机制,包括数据源的配置、连接的获取和关闭等。开发者只需要通过配置文件或注解的方式,定义数据源的相关信息,Spring DAO会自动处理数据源的连接和释放。

Spring ORM

Spring ORM(Object-Relational Mapping)是Spring框架中用于实现对象关系映射的模块。对象关系映射是一种将关系数据库中的数据映射到对象模型的编程技术。Spring ORM模块通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。

Spring ORM的原理主要包括以下几个方面:

  1. 映射元数据:Spring ORM使用映射元数据来描述对象和数据库之间的映射关系。这些元数据可以是XML配置文件、注解或Java类,用于定义数据库表和对象的对应关系、字段映射等。Spring ORM在启动时,会解析这些元数据,并构建相应的映射关系。
  2. 持久化层:Spring ORM提供了一个持久化层,用于实现对象的持久化操作。这个持久化层可以与应用程序的业务逻辑层之间进行交互,提供数据访问和操作的方法。开发者可以通过配置文件或注解的方式,定义持久化层的接口和实现类,实现数据的持久化操作。
  3. 事务管理:Spring ORM提供了一套统一的事务管理机制,使得开发者可以更加方便地处理事务。通过配置事务管理器,Spring ORM可以自动管理事务的开启、提交和回滚等操作,简化事务处理的过程。
  4. SQL查询生成:在复杂的查询场景下,开发者可以自定义SQL查询语句,或者使用HQL(Hibernate Query Language)或Criteria API等查询方式。Spring ORM根据对象的属性和数据库表的结构,自动生成相应的SQL查询语句,并执行查询操作。
  5. 连接池管理:Spring ORM提供了一套连接池管理机制,用于管理和复用数据库连接。通过配置连接池的相关参数,如最大连接数、最小连接数等,Spring ORM可以自动管理连接的获取和释放,提高数据库访问的性能和效率。

Spring AOP

Spring AOP(Aspect-Oriented Programming)是Spring框架的一个重要特性,它通过将应用程序中的关注点(Aspect)分离出来,提供了一种模块化、可重用的方式来处理横切关注点,例如日志记录、事务处理、安全控制等。Spring AOP原理主要包括以下几个方面:

  1. 面向切面编程:AOP将应用程序中的关注点划分为核心业务逻辑和横切关注点。核心业务逻辑关注的是应用程序的主要功能,而横切关注点是那些与业务逻辑无关,却为业务模块所共同调用的逻辑或责任,例如事务处理、日志管理、权限控制等。通过将横切关注点抽象为切面,开发者可以更加灵活地处理这些关注点,而不必在每个业务逻辑中显式地编写相关代码。
  2. 动态代理:Spring AOP使用动态代理技术来实现面向切面编程。动态代理是指在运行时动态创建目标对象的代理对象,通过代理对象来扩展目标对象的功能。Spring AOP使用JDK动态代理或CGLIB动态代理技术,根据目标对象的实现类来创建代理对象。这样,当调用目标对象的方法时,会触发代理对象中的增强处理逻辑,实现对目标方法的拦截、增强或织入等功能。
  3. 连接点(Joinpoint):在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。在Spring AOP中,连接点是程序执行过程中的一个关键点,可以被拦截并织入增强处理逻辑。开发者可以在切面中定义连接点,并在连接点上织入增强处理逻辑。
  4. 切面(Aspect):切面是Spring AOP中用于定义横切关注点的对象。一个切面可以包含多个通知(Advice),并在特定的连接点上执行这些通知。开发者可以通过XML配置文件或注解的方式定义切面,并在切面中定义增强处理逻辑。
  5. 通知(Advice):通知是切面中的具体增强处理逻辑,它定义了在连接点上应该执行的操作。通知可以是前置通知(Before)、后置通知(After)、返回通知(AfterReturning)、异常通知(AfterThrowing)等。开发者可以在切面中定义不同类型的通知,并在相应的连接点上执行它们。
  6. 切入点(Pointcut):切入点定义了哪些连接点应该被拦截并织入增强处理逻辑。开发者可以通过表达式或注解的方式定义切入点,以便精确地指定哪些方法或哪些条件下的方法应该被拦截。

Spring Web

Spring Web模块是Spring框架中的一部分,它提供了对Web应用程序的支持。以下是Spring Web原理的简要概述:

  1. 模型-视图-控制器(MVC)模式:Spring Web基于MVC模式设计,它将应用程序分为三个主要组件:模型、视图和控制器。模型负责处理业务逻辑和数据访问,视图负责呈现用户界面,控制器负责接收用户请求并调用模型和视图进行响应。通过使用MVC模式,Spring Web使得应用程序的结构更加清晰,提高了代码的可维护性和可扩展性。
  2. Servlet容器集成:Spring Web通过与Servlet容器(如Tomcat)的集成,实现了对Web请求的处理。在Servlet容器中,每个请求都由一个相应的Servlet处理。Spring Web提供了对Servlet容器的集成,使得开发者可以使用Spring提供的控制器和视图来处理Web请求。
  3. 控制器(Controller):控制器是Spring Web中的核心组件之一,负责处理用户请求并返回响应。控制器通常由@Controller注解标记的类实现,并使用@RequestMapping注解来指定处理的URL路径。控制器可以调用模型来处理业务逻辑,并将结果传递给视图进行渲染。
  4. 视图(View):视图是呈现给用户的界面,用于展示数据给用户。在Spring Web中,视图可以使用多种技术实现,如JSP、Thymeleaf、Freemarker等。开发者可以根据需要选择适合的视图技术来构建用户界面。
  5. 拦截器(Interceptor):拦截器是Spring Web中用于拦截请求并执行特定逻辑的组件。通过使用拦截器,开发者可以在请求处理之前或之后执行特定的逻辑,例如权限验证、日志记录等。拦截器通常由@Interceptor注解标记的类实现,并通过配置文件进行注册。
  6. 静态资源处理:Spring Web提供了对静态资源处理的支持,例如HTML、CSS、JavaScript等文件。开发者可以将这些文件放在特定的目录下,并通过配置文件指定这些目录的URL路径。这样,当用户请求这些资源时,Servlet容器会自动将请求转发给相应的静态资源处理器进行处理。

Spring Web Mvc请求流程

  1. 用户发送请求:用户在浏览器中输入网址或点击链接,向服务器发起HTTP请求。
  2. DispatcherServlet接收请求:DispatcherServlet是Spring MVC框架中的核心组件,负责接收所有的HTTP请求。DispatcherServlet会根据配置将请求分发给相应的处理器映射(HandlerMapping)。
  3. 处理器映射(HandlerMapping):处理器映射负责根据请求找到相应的处理器(Controller)。在Spring MVC中,处理器映射可以通过多种方式实现,例如通过URL路径匹配、注解等方式将请求映射到相应的处理器。
  4. 控制器(Controller)处理请求:控制器是用于处理请求的组件,它负责处理业务逻辑和数据。控制器方法会返回一个ModelAndView对象,该对象包含了要渲染的视图和要传递给视图的数据。控制器与视图之间通过Model进行数据传递。
  5. 视图解析器(View Resolver)解析视图:视图解析器负责解析ModelAndView对象中的视图名,找到相应的视图进行渲染。在Spring MVC中,可以通过配置文件或注解的方式指定视图解析器的配置,例如使用JSP、Thymeleaf等模板引擎进行视图渲染。
  6. 视图渲染:视图会根据控制器返回的数据进行渲染,生成最终的HTML页面或其他类型的响应。
  7. 返回响应:最终的响应会通过DispatcherServlet返回给用户。在这个过程中,拦截器(Interceptor)可以用于在请求处理之前或之后执行特定的逻辑,例如权限验证、日志记录等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幽·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值