首页 > 其他分享 >你了解的spring框架有哪些

你了解的spring框架有哪些

时间:2024-10-26 08:48:04浏览次数:3  
标签:事务 框架 哪些 spring AOP bean MVC Spring AspectJ

列举一些重要的Spring模块?

  • Spring Core: 基础,可以说 Spring 其他所有的功能都需要依赖于该类库。主要提供 IOC 依赖注入功能。
  • **Spring Aspects ** : 该模块为与AspectJ的集成提供支持。
  • Spring AOP :提供了面向方面的编程实现。
  • Spring JDBC : Java数据库连接。
  • Spring JMS :Java消息服务。
  • Spring ORM : 用于支持Hibernate等ORM工具。
  • Spring Web : 为创建Web应用程序提供支持。
  • Spring Test : 提供了对 JUnit 和 TestNG 测试的支持。

谈谈自己对于 Spring IoC 和 AOP 的理解

IoC

IoC(Inverse of Control:控制反转)而是一种设计思想,就是 将原本在程序中手动创建对象的控制权,交由Spring框架来管理。 IoC 在其他语言中也有应用,并非 Spirng 特有。 IoC 容器是 Spring 用来实现 IoC 的载体, IoC 容器实际上就是个Map(key,value),Map 中存放的是各种对象。

将对象之间的相互依赖关系交给 IOC 容器来管理,并由 IOC 容器完成对象的注入。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。 IOC 容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。 在实际项目中一个 Service 类可能有几百甚至上千个类作为它的底层,假如我们需要实例化这个 Service,你可能要每次都要搞清这个 Service 所有底层类的构造函数,这可能会把人逼疯。如果利用 IOC 的话,你只需要配置好,然后在需要的地方引用就行了,这大大增加了项目的可维护性且降低了开发难度。

Spring 时代我们一般通过 XML 文件来配置 Bean,后来开发人员觉得 XML 文件来配置不太好,于是 SpringBoot 注解配置就慢慢开始流行起来。

推荐阅读:https://www.zhihu.com/question/23277575/answer/169698662

Spring IOC的初始化过程:

IOC源码阅读

AOP

AOP(Aspect-Oriented Programming:面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码降低模块间的耦合度,并有利于未来的可拓展性和可维护性

Spring AOP就是基于动态代理的,如果要代理的对象,实现了某个接口,那么Spring AOP会使用JDK Proxy,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候Spring AOP会使用Cglib ,这时候Spring AOP会使用 Cglib 生成一个被代理对象的子类来作为代理,如下图所示:

当然你也可以使用 AspectJ ,Spring AOP 已经集成了AspectJ ,AspectJ 应该算的上是 Java 生态系统中最完整的 AOP 框架了。

使用 AOP 之后我们可以把一些通用功能抽象出来,在需要用到的地方直接使用即可,这样大大简化了代码量。我们需要增加新功能时也方便,这样也提高了系统扩展性。日志功能、事务管理等等场景都用到了 AOP 。

Spring AOP 和 AspectJ AOP 有什么区别?

Spring AOP 属于运行时增强,而 AspectJ 是编译时增强。 Spring AOP 基于代理(Proxying),而 AspectJ 基于字节码操作(Bytecode Manipulation)。

Spring AOP 已经集成了 AspectJ ,AspectJ 应该算的上是 Java 生态系统中最完整的 AOP 框架了。AspectJ 相比于 Spring AOP 功能更加强大,但是 Spring AOP 相对来说更简单,

如果我们的切面比较少,那么两者性能差异不大。但是,当切面太多的话,最好选择 AspectJ ,它比Spring AOP 快很多。

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 都有不同的会话

Spring 中的 bean 生命周期?

说说 Spring MVC 有哪些优点?

  1. 清晰的MVC实现:Spring MVC 提供了一个清晰的模型-视图-控制器(MVC)架构实现,有助于将业务逻辑、用户界面和输入处理分离,使代码更加模块化,易于维护。

  2. 灵活性:Spring MVC 允许开发者定制几乎每一个组件,从请求到视图的映射,到视图解析器,再到数据绑定和验证机制,都提供了高度的灵活性。

  3. 强大的数据验证功能:Spring MVC 内置了数据验证功能,支持通过注解或者自定义验证逻辑来进行数据验证,同时可以很好地与错误信息的国际化相结合。

  4. 文件上传支持:Spring MVC 内置了文件上传的支持,不需要依赖第三方库即可处理文件上传请求。

  5. 异常处理:Spring MVC 支持通过控制器方法或全局异常处理器来处理异常,这使得错误处理更为集中和一致。

  6. 请求和响应的灵活处理:Spring MVC 支持多种数据格式(如 JSON 和 XML),并能自动进行序列化/反序列化,这使得与 RESTful 服务交互变得简单。

  7. 与Spring框架的紧密集成:Spring MVC 作为 Spring 框架的一部分,可以方便地利用 Spring 框架的其他特性,如依赖注入(DI)、面向切面编程(AOP)、事务管理等。

  8. 社区支持:由于 Spring MVC 是 Spring 框架的一部分,因此它拥有庞大的用户群和活跃的社区支持,这为解决开发过程中遇到的问题提供了便利。

  9. 测试友好:Spring MVC 设计时考虑到了单元测试的需求,提供了模拟 HTTP 请求的功能,使得编写控制器层的测试变得更加容易。

SpringMVC 工作原理了解吗?

Spring 框架中用到了哪些设计模式?

说几种比较常见的:

Spring 管理事务的方式有几种?

  1. 编程式事务,在代码中硬编码。(不推荐使用)
  2. 声明式事务,在配置文件中配置(推荐使用)

声明式事务又分为两种:

  1. 基于XML的声明式事务
  2. 基于注解的声明式事务

Spring 事务中的隔离级别有哪几种?

1、读未提交:当前事务读到的数据是别的事务想要修改成为的但是没有修改成功的数据。这时就会产生脏读(读到别人没有提交的数据,造成回滚了)

脏读:所谓的脏读,其实就是读到了别的事务回滚前的脏数据。比如事务B执行过程中修改了数据X,在未提交前,事务A读取了X,而事务B却回滚了,这样事务A就形成了脏读。

2、读已提交:针对 update 或 delete 在事务处理期间,如果其他事务修改了相应的数据,那么同一个事务的多个 SELECT 语句可能返回不同的结果。在一个事务内,能看到别的事务提交的数据。出现不可重复读

3、可重复读:针对 insert是 MySQL 的默认隔离级别,它确保了一个事务中多个实例在并发读取数据的时候会读取到一样的数据;不过理论上,这会导致另一个棘手的问题:幻读 (通过加锁机制,但新加的数据没有上锁,就会出现幻读)

解决办法:InnoDB 存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决幻读。

幻读:事务A首先根据条件索引得到N条数据,然后事务B改变了这N条数据之外的M条或者增添了M条符合事务A搜索条件的数据,导致事务A再次搜索发现有N+M条数据了,就产生了幻读。

4、可串行化:就是一个一个来,性能最慢

Spring 事务中哪几种事务传播行为?

传播属性

说明

PROPAGATION_REQUIRED【required [rɪ'kwaɪəd]】

【 propagation [ˌprɒpə'ɡeɪʃ(ə)n] 】

如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。

PROPAGATION_SUPPORTS 【support [səˈpɔrt]】

支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY 【mandatory [ˈmændəˌtɔri] 】

使用当前的事务,如果当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW 【 requires_new 】

新建事务,如果当前存在事务,把当前事务挂起

PROPAGATION_NOT_SUPPORTED 【 supported 】

以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER 【 never 】

以非事务方式执行,如果当前存在事务,则抛出异常。

PROPAGATION_NESTED 【 nested 】

如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与REQUIRED类似的操作。

标签:事务,框架,哪些,spring,AOP,bean,MVC,Spring,AspectJ
From: https://blog.csdn.net/x737510/article/details/143169304

相关文章

  • [java毕业设计]免费分享一套SpringBoot+Vue宠物商城网站系统【论文+源码+SQL脚本】,帅
    大家好,我是java1234_小锋老师,看到一个不错的SpringBoot++Vue宠物商城网站系统,分享下哈。项目视频演示【免费】SpringBoot+Vue宠物商城网站系统Java毕业设计_哔哩哔哩_bilibili项目介绍本论文旨在设计与实现一个基于SpringBoot和Vue.js的宠物商城网站系统。随着互联网技......
  • Apple 新品发布会亮点有哪些 | Swift 周报 issue 61
    文章目录前言新闻和社区苹果据称正洽谈投资OpenAI英伟达也有意跟投消息称苹果公司服务部门将裁员约百人,波及AppleBooks/AppleNews等业务苹果拟9月10日举行今年最重磅新品发布会,iPhone16亮相?都有哪些看点?提案正在审查的提案Swift论坛推荐博文话题讨论关......
  • 基于SpringBoot+Vue的药店管理系统设计与实现毕设(文档+源码)
            目录一、项目介绍二、开发环境三、功能介绍四、核心代码五、效果图六、源码获取:        大家好呀,我是一个混迹在java圈的码农。今天要和大家分享的是一款基于SpringBoot+Vue的药店管理系统,项目源码请点击文章末尾联系我哦~目前有各类成品毕......
  • 基于SpringBoot+Vue的校园二手书交易平台管理系统设计与实现毕设(文档+源码)
           目录一、项目介绍二、开发环境三、功能介绍四、核心代码五、效果图六、源码获取:        大家好呀,我是一个混迹在java圈的码农。今天要和大家分享的是一款基于SpringBoot+Vue的校园二手书交易平台管理系统,项目源码请点击文章末尾联系我哦~目前有......
  • iframe有哪些加载事件
    iframe的加载事件有以下几个:1、onload事件;2、onunload事件;3、onunload事件。onload事件是iframe加载完成后触发的事件。当嵌套的页面完全加载并准备好时,这个事件会被触发。开发者可以使用这个事件来执行与加载内容相关的操作,例如修改iframe的样式、内容或与其交互。一、onload......
  • 基于SpringBoot + Vue + MySQL 实现平行志愿录取系统(数据库设计&毕业设计)
    一、需求分析        平行志愿录取系统是一种用于高等院校招生录取的志愿填报和录取方式,旨在提高录取的公平性和科学性,确保考生能够在选择志愿时有更大的灵活性和机会。下面详细分析平行志愿录取系统的定义、功能以及其优缺点。志愿录取系统功能:志愿填报:考生可以......
  • 基于Spring Boot+Android的民宿预订系统
    目录前言 一、技术栈二、系统功能介绍三、核心代码1、登录模块 2、文件上传模块3、代码封装前言Android的民宿预订系统设计的目的是为用户提供民宿客房、公告信息等方面的平台。与PC端应用程序相比,Android的民宿预订系统的设计主要面向于民宿,旨在为管理员和用户......
  • 基于Spring Boot+Android的武汉市公交路线查询系统
    目录前言 一、技术栈二、系统功能介绍三、核心代码1、登录模块 2、文件上传模块3、代码封装前言武汉市公交路线查询系统APP设计的目的是为用户提供公交路线等方面的平台。与PC端应用程序相比,武汉市公交路线查询管理的设计主要面向于公交公司,旨在为管理员和用户......
  • 服务器操作系统有哪些
    ###服务器操作系统有哪些?服务器操作系统的选择关键在于稳定性、安全性、兼容性以及支持的服务范围。常见的服务器操作系统包括Linux、WindowsServer、Unix、macOSServer以及Solaris。这些系统各有千秋,但广泛应用于不同的业务场景中。Linux因其出色的稳定性、开源性质和灵活的......
  • 编程语言有哪些
    编程语言主要包括以下类型:1、机器语言与汇编语言;2、系统编程语言;3、通用高级编程语言;4、领域特定语言(DSL);5、脚本语言;6、函数式编程语言;7、逻辑编程语言;8、并发编程语言。其中,*通用高级编程语言在当代的软件开发中应用最为广泛,这类语言旨在提高开发效率,降低硬件依赖,有助于开发者更......