Spring

Spring框架是一个开源框架,旨在解决企业应用程序开发中的复杂性。它由七个模块组成,包括核心容器、上下文、AOP、DAO、ORM、Web和MVC框架。Spring通过控制反转和依赖注入实现了对象之间的松耦合,并提供了面向切面编程的能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念

Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。Spring框架的不光是技术牛,而是它的核心思想更牛,它不重复发明轮子,而是"拿来主义",把业界做的最好的技术黏合起来形成一个强大的企业级的应用框架。

Spring的分层结构

Spring 框架是一个分层架构,由7个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,如下图所示:
在这里插入图片描述
组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现,可以说Spring管理着所有模块。

模块说明
核心容器Spring Core核心容器提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转(IOC)模式,将应用程序的配置和依赖性规范与实际的应用程序代码分开。
Spring上下文Spring ContextSpring上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
Spring AOP通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。可以很容易地使 Spring框架管理的任何对象支持AOP。Spring AOP模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
Spring DAOJDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
Spring ORMSpring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括JDO、Hibernate和iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
Spring WebWeb上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以Spring 框架支持与 Jakarta Struts的集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
Spring MVC框架MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

Spring的核心思想

Spring框架主要用来管理Bean的,底层使用BeanFactory用来储存Bean
被Spring容器管理的对象叫做Bean

模块说明
BeanFactorySpring内部使用,创建bean的工厂
ApplicationContext外部应用程序调用,也成为spring容器
IoC控制反转Inversion of Control开发者在无需自己new对象,交给Ioc创建并管理
DI依赖注入Dependency Injection松耦合方式实现对象直接的依赖
AOP面向切面编程补充java面向对象的不足

IOC思想

IOC中文意思表示 : 控制反转

  1. 以前我们需要使用对象时就new,new多了浪费会给内存造成很大影响。
  2. 而现在程序需要把new对象的控制权交给IOC去创建对象;反转了程序需要使用对象时不在去new,而是找IOC容器取
  3. IOC容器反过来控制程序所需要的外部资源,也是程序开发思想

谁控制谁?
IOC容器控制应用程序去创建对象

控制什么?
控制对象本身的创建,实例化。控制对象的依赖关系。

为何叫反转?
因为应用程序不能主动获取资源了,而是被动等待IOC给他注入它所需要的资源,所以称为反转

那些方向被反转了?
不需要程序创建对象了,程序获得资源的方式反了

为什么需要反转?
引入IOC容器过后,体系更为松散,而且管理更有序(只需要实现接口的类),真正实现了松散耦合

什么是IOC容器?
IOC容器的对象装配以及对象生命周期管理的软件,实现服务消费者不去直接依赖服务提供者的组件;而是依赖中间商

DI思想

中文意思表示 : 依赖注入(自动装配)

  1. 因使用IOC容器创建的是无参构造我们很难在创建构造函数为成员属性赋值,着时候出现DI思想
  2. 程序依赖于IOC容器去为类成员属性初始化,而IOC可以向成员属性注入值进而被初始化
  3. 应用程序依赖IOC容器来注入所需要的外部资源(对类所讲,外部资源就是自己类的内部不能实现的得到的东西)

谁依赖谁?
应用程序依赖IOC容器

为什么需要依赖?
因为发生了反转,应用程序依赖的资源都在IOC容器内。我们需要取到我们的对象

依赖什么东西?
应用程序依赖IOC容器,IOC容器为他注入所需要的(资源)


谁注入与谁?
IOC容器注入到应用程序

注入了什么东西?
注入应用程序所需要的资源

为何要注入?
程序正常运行需要这些资源,才可以运行

依赖注入和控制反转是同样的概念吗?
不是同一概念,其实他们描述的是同一件事情,但是冲不同角度来说

  1. 控制反转:是从IOC容器的角度描述
  2. 依赖注入:是从应用程序的角度思考问题
  3. 控制反转描述是:IOC容器反过来控制应用程序,控制程序所需要外部资源
  4. 依赖注入描述是:应用程序依赖IOC容器,依赖他注入所需要的资源

----------------完成依赖注入和控制反转只有应用程序和IOC-----------

使用IOC和DI开发需要的新思想

  1. 应用程序不需要主动new对象,但须要描述创建他们的方式
  2. 我们无需使用有参构造,而是通过注入到属性的方式开发
  3. 所有组件都是被动的,所有组件初始化/专供都需要容器负责

AOP概念

作用

  1. 实现对原有的方法进行扩展,实现对程序代码的解耦
  2. 在影响源代码的情况下,对原有的方法进行扩展

Aop专业名名字解释

术语解释
目标当前需要切面的对象
拦截点指那些被拦截后的方法称为点(Spring只支持方法拦截)
切入点要对那些拦截点进行拦截的定义
连接点已存在的业务方法(一般用在环绕通知)
通知(增强)指Aop拦截到对象方法后需要做那些事情,一个advice有多个通知方法
切面切入点 和 通知 的结合(需要切面的类所在的包)
引介一种特殊的 通知,在运行期为类动态的添加一些方法(在不修改源代码的前提下)
织入把"前置增强" 和 “后置增强” 应用到目标对象的过程
代理一个类被AOP注入增强后,就产生了一个代理类

通知(增强切入方法的功能)

术语功能
前置加强方法执行之前加入相关代码
后置加强方法执行之后加入相关代码
环绕加强前置加强和后置加强的综合
异常加强目标方法发生异常时通知

AOP应用场景

前置加强:用户信息检查
后置加强:
环绕加强:IO创建流与关流、数据库加装驱动与关流、性能测试、缓存管理、权限管理、事务的管理
异常加强:目标方法抛出异常,我们需要在后置回滚用户数据

多切面执行顺序
下面是 两个切面 各通知的执行顺序:
在这里插入图片描述

Spring对事务的管理

概念:
Spring针对于数据库中的事务控制,开发了一套注解@Transactional

实现原理:
其核心原理使用了AOP的Around通知功能,对原有的方法进行扩展;实现了对事务的控制

  1. 方法执行前开启数据库事务
  2. 如果方法执行成功则事务提交
  3. 如果执行不成功则事务回滚
    在这里插入图片描述

@Transactional注解默认的事务策略

  1. 如果出现了运行时异常,事务才会回滚
  2. 如果控制的方法,检查异常(编译异常:不是运行时异常),事务不会自动回滚;

Spring认为程序既然已经提示需要异常处理,则默认由程序员自己控制,Spring不负责管理

注解的属性

rollbackFot: 遇到什么类型的异常回滚事务
noRollbackFor: 遇到什么类型的异常事务不回滚

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值