Spring 基础知识

1.  Spring框架通过多种方式来保障线程安全。

1.  使用线程安全的数据结构:Spring框架中使用的数据结构,如ConcurrentHashMap等,都是线程安全的,可以保证在多线程环境下数据的正确性。

2.  对象锁定:Spring框架使用锁定机制来保障对象的安全性。例如,在执行数据库操作时,Spring可以对数据库连接对象进行锁定,以保证在多线程环境下数据的正确性。

3.  使用线程池:Spring框架可以使用线程池来管理线程,避免因线程数量过多导致的性能问题。

4.  使用事务管理:Spring框架的事务管理功能可以保证在多线程环境下数据的一致性。例如,在执行数据库操作时,如果出现异常,Spring可以回滚事务,以保证数据的完整性。

5.  使用单例模式:Spring框架中的许多组件都使用单例模式,以保证在多线程环境下数据的正确性。

2.  Spring 中有哪些设计模式?

简单工厂:Beanfactory

工厂方法:FactoryBean的getObject方法

单例模式:Spring仅实现了类的实例的全局访问点

适配器模式:controller

装饰器模式:类名包含wrapper、Decorator的类

策略模式:实现的Resource接口,访问不同的资源

动态代理:Aop

观察者模式:spring的listener就是用的观察者模式

单例模式: Spring 的 Bean 默认是单例模式,即一个 Bean 对象只会被创建一次并在整个应用中共享。这种方式可以提高性能和资源利用率。

工厂模式: Spring 使用工厂模式来创建和管理 Bean 对象,即通过 BeanFactory 或 ApplicationContext 等容器来创建和管理 Bean 对象。这种方式可以将对象的创建和管理解耦,并且可以灵活地配置和管理对象。

代理模式:Spring 使用代理模式来实现 AOP(面向切面编程),即通过代理对象来增强原始对象的功能。这种方式可以实现横切关注点的复用,并且可以在不修改原始对象的情况下实现功能增强。

观察者模式:Spring 使用观察者模式来实现事件驱动编程,即通过事件监听机制来处理事件。这种方式可以实现松耦合,使得对象之间的交互更加灵活。

模板方法模式:Spring 使用模板方法模式来实现 JdbcTemplate、HibernateTemplate 等模板类,即将相同的操作封装在模板方法中,而将不同的操作交给子类来实现。这种方式可以减少重复代码,提高代码的复用性。

适配器模式:Spring 使用适配器模式来实现不同接口之间的适配,如 Spring MVC 中的 HandlerAdapter 接口,可以将不同类型的 Controller 适配为统一的处理器。

3.Spring 中的注解有哪些?它们的具体作用是什么?

Spring 中的注解有很多,以下是一些常用的注解和它们的作用:

1、@Autowired

@Autowired 注解用于自动装配,将匹配类型的 bean 自动连接到指定的字段、方法或构造函数上,从而简化了依赖注入的过程。

@Autowired和@Resource都是Spring中用于依赖注入的注解,它们的作用都是将一个bean注入到另一个bean中,

但两者有以下区别:

1.1、注入方式不同:

@Autowired是按照类型来自动装配的,它通过byType的方式实现自动装配,如果容器中有多个类型匹配的bean,那么会抛出异常。

@Resource默认按照名称来装配,它通过byName的方式实现自动装配,如果指定了name属性,那么会按照名称装配,如果没有指定name属性,那么会按照类型装配。

1.2、来源不同:

@Autowired是Spring提供的注解,而@Resource是JSR-250规范中定义的注解,因此@Autowired是Spring特有的注解,而@Resource是JavaEE的注解,它们的使用范围不同。

1.3、注入方式不同:

@Autowired只能注入其他bean类型的属性。

@Resource既可以注入其他bean类型的属性,也可以注入普通类型的属性。

1.4、属性不同:

@Autowired没有额外的属性。

@Resource有两个重要的属性,分别是name和type,其中name属性用于指定bean的名称,type属性用于指定bean的类型。

总的来说,@Autowired和@Resource都是用于实现依赖注入的注解,但使用方式和实现方式略有不同,开发者可以根据需要选择使用哪个注解。

4.Spring 中的 MVC 模式是什么?它的作用是什么?它的执行原理是什么?

Spring MVC是一种基于MVC(Model-View-Controller)模式的Web框架,它通过将web应用程序分为模型、视图和控制器三个部分,来实现业务逻辑、用户交互和请求处理的分离。

Spring MVC的主要作用是提供一种灵活、高效、可扩展的Web应用程序开发框架,使开发人员可以更加方便地开发出高质量的Web应用程序。

Spring MVC的执行原理如下:

Spring MVC中的核心组件包括:

1、DispatcherServlet:Spring MVC的核心组件,负责接收客户端请求并将请求分派给相应的处理程序。

2、HandlerMapping:负责将请求映射到相应的处理程序。

3、Controller:处理请求并生成模型和视图信息。

4、ViewResolver:将逻辑视图名称解析为实际视图对象。

5、View:负责渲染模型数据并生成响应。

6、Model:用于存储和传递数据。

7、ModelAndView:包含模型和视图信息。

总的来说,Spring MVC是一种基于MVC模式的Web框架,它的作用是实现业务逻辑、用户交互和请求处理的分离,提高Web应用程序的可维护性和可扩展性。

它的执行原理是通过前置控制器、请求映射、业务逻辑处理、视图解析和渲染等组件的协作,将用户请求处理成最终的响应结果。

5.Spring 中的事务是什么,如何进行事务管理?常用的事务管理方式有哪些?

Spring中的事务是指对数据库操作的一系列操作,可以确保一组操作要么全部成功要么全部失败,保持数据的一致性。

Spring提供了声明式和编程式两种事务管理方式。

在Spring中进行事务管理,需要使用事务管理器,并将其配置为Spring中的Bean。

Spring提供了多个事务管理器,如JDBC事务管理器、Hibernate事务管理器、JTA事务管理器等。

在进行事务管理时,可以使用注解或XML进行配置。

1、对于声明式事务,需要使用Spring AOP来实现。可以通过@Transactional注解或XML配置来定义事务。

1.1、在基于注解的方式中,只需要在需要添加事务的方法上添加@Transactional注解即可。

1.2、在基于XML的方式中,需要使用tx:advice元素和tx:attributes元素分别定义事务通知和事务属性。

2、对于编程式事务,需要在代码中显式调用事务管理器的API来控制事务。可以使用Spring提供的TransactionTemplate类来简化编程式事务的处理。

总的来说,Spring的事务管理功能可以帮助我们完成复杂的数据库操作,并确保数据的一致性。

通过声明式事务和编程式事务的方式,我们可以根据实际需求选择最合适的方式来进行事务管理。

常用的事务管理方式有以下几种:

1、JDBC事务:Spring中最基本的事务管理方式,它直接使用JDBC连接来管理事务。使用JdbcTemplate进行数据库操作,并在事务管理器中启用事务。

2、Hibernate事务:使用Hibernate框架的事务管理方式,它使用Hibernate的事务管理器来管理事务。使用Session进行数据库操作,并在事务管理器中启用事务。

3、JTA事务:使用Java事务API的事务管理方式,它可以管理多个资源的事务。使用JTA事务管理器来管理事务,并使用JNDI查找DataSource和其他资源。

4、MyBatis事务:使用MyBatis框架的事务管理方式,它使用SqlSession进行数据库操作,并在事务管理器中启用事务。

5、MongoDB事务:MongoDB 4.0及以上版本支持事务,Spring提供了MongoTransactionManager来管理MongoDB事务。

总的来说,不同的事务管理方式适用于不同的场景和需求。我们需要根据实际情况来选择最适合的事务管理方式。

6.Spring 中的事务传播行为有哪些?

Spring中的事务传播行为是指在多个事务方法相互调用的情况下,不同方法之间事务如何进行传播和交互的规则。

Spring框架提供了七种不同的事务传播行为,分别是:

1、PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果不存在事务,则创建一个新的事务。这是默认的传播行为。

2、PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果不存在事务,则以非事务的方式继续执行。

3、PROPAGATION_MANDATORY:如果当前存在事务,则加入该事务;如果不存在事务,则抛出异常。

4、PROPAGATION_REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则挂起该事务。

5、PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,则挂起该事务。

6、PROPAGATION_NEVER:以非事务方式执行操作,如果当前存在事务,则抛出异常。

7、PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行;如果不存在事务,则创建一个新的事务。

这些传播行为可以通过TransactionDefinition接口中的常量来指定。

7.Spring 中的过滤器和拦截器有什么区别?

Java过滤器和拦截器在以下六个方面存在区别:

1.  实现原理:拦截器是基于Java的反射机制,而过滤器是基于函数回调。

2.  依赖关系:拦截器不依赖与servlet容器,而过滤器则依赖于servlet容器。

3.  功能范围:拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。

4.  访问权限:拦截器可以访问action上下文、值栈里的对象,而过滤器不能。

5.  生命周期:在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

6.  IOC容器的访问:拦截器可以获取IOC容器中的各个bean,而过滤器则不能。

总结来说,过滤器和拦截器在实现原理、依赖关系、功能范围、访问权限、生命周期以及IOC容器的访问等方面存在差异。

Spring 中的过滤器和拦截器都可以对请求进行处理,但它们有一些不同点:

1、运行位置不同:过滤器是在请求到达 Servlet 容器之前进行处理的,而拦截器是在请求到达 Spring MVC 控制器之前或之后进行处理的。

2、依赖不同:过滤器是依赖于 Servlet 容器的,而拦截器是依赖于 Spring MVC 框架的。

3、作用时间不同:过滤器在请求进入 Servlet 容器前执行,而拦截器在请求进入 Spring 容器后执行。

4、功能不同:过滤器主要用于对请求进行过滤和处理,比如编码转换、请求处理时间统计等;拦截器主要用于对请求进行增强处理,比如权限验证、日志记录等。

总的来说,过滤器是在 Servlet 容器层面上对请求进行处理的,而拦截器是在 Spring MVC 框架层面上对请求进行处理的,过滤器更加底层,可以对请求进行一些底层的处理,而拦截器更加高级,可以对请求进行一些业务逻辑层面的处理。在实际开发中,可以根据具体的需求选择使用过滤器或者拦截器。

8.Spring 中的声明式事务和编程式事务有什么区别?

声明式事务和编程式事务是Spring中两种实现事务管理的方式,

它们之间的区别主要有以下几点:

1.编程式事务需要在代码中显式调用事务管理器的API来控制事务,而声明式事务是通过配置实现的,无需在代码中添加事务管理代码。

2.声明式事务使用AOP技术,在方法调用前后自动添加事务控制代码,而编程式事务需要手动编写事务控制代码。

3.声明式事务将业务逻辑和事务管理分离,使得代码更加清晰和易于理解,而编程式事务将业务逻辑和事务管理混在一起,代码可读性和可维护性较差。

4.声明式事务只适用于对单个数据库的事务管理,对于跨多个数据源或资源的事务管理,需要使用编程式事务或JTA事务。

总的来说,声明式事务相对于编程式事务具有更高的可读性、可维护性和代码清晰度,因此更加常用。

但是对于一些复杂的事务场景,编程式事务可能更加灵活,可以满足更多的需求。需要根据实际情况选择最适合的事务管理方式。

9.Spring 中如何使用缓存?

在 Spring 中,可以通过使用缓存来提高应用程序的性能和响应速度。

Spring 提供了对缓存的支持,可以使用注解来简化缓存的使用。

常见的缓存注解包括 @Cacheable、@CachePut、@CacheEvict 等。

使用这些注解可以方便地将方法的返回值缓存起来,下次调用该方法时可以直接从缓存中获取结果,避免重复计算。

10常用的缓存框架有哪些?

常用的缓存框架包括:

2.1、Ehcache:一个基于 Java 的开源缓存框架,具有高速、高效、易用等特点。

2.2、Memcached:一个高性能的分布式内存缓存系统,常用于缓存 Web 应用的数据。

2.3、Redis:一个高速的 Key-Value 存储系统,支持多种数据结构和高级功能,如事务、发布/订阅、Lua 脚本等。

2.4、Caffeine:一个基于 Java 的高速缓存库,具有高速、高效、伸缩性等特点。

2.5、Guava Cache:Google 提供的一个基于 Java 的本地缓存框架,具有高速、高效、内存管理等特点。

在使用缓存框架的过程中,需要关注缓存的一致性和缓存的更新策略,确保缓存数据的有效性和正确性。

在使用缓存框架时需要根据具体的需求选择合适的框架,考虑因素包括缓存的大小、分布式支持、性能、易用性等。

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

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

相关文章

shopify入门教程-应用开发(二)

4.内网穿透 为什么要用这个,就是把电脑上的开发内容通过内网穿透显示到你的开发店铺上。这里的内网穿透我用了ngrok,花生壳,但都不如shopify官方推荐的cloudflare好用。所以这里我也推荐cloudflare。 运用内网穿透2个步骤 把app运行起来 ​​​​​​​…

正点原子rk3588编译sdk

1、编译SDK 1.1 安装 RK3588 Linux SDK .repo/repo/repo sync -l -j101.2 SDK 工程目录介绍 app:存放上层应用 app,包括 Qt 应用程序,以及其它的 C/C应用程序。 buildroot:基于 buildroot 开发的根文件系统。 debian&#xff1…

【shell脚本实战案例】数据磁盘初始化

文章目录 一、案例应用场景二、案例需求三、案例算法四、代码实现五、实现验证 🌈你好呀!我是 山顶风景独好 🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分使然!😊 🌸愿您在此停留…

已解决javax.xml.bind.MarshalException:在RMI中,参数或返回值无法被编组的正确解决方法,亲测有效!!!

已解决javax.xml.bind.MarshalException:在RMI中,参数或返回值无法被编组的正确解决方法,亲测有效!!! 目录 问题分析 出现问题的场景 服务器端代码 客户端代码 报错原因 解决思路 解决方法 1. 实现…

IBCS 虚拟专线用哪些特点!

当今数字化时代,高效、稳定、安全的网络连接对于企业和个人来说至关重要。IBCS 虚拟专线作为一种创新的网络解决方案,凭借其众多显著的优势,正逐渐成为众多用户的首选。 IBCS 虚拟专线最突出的优势之一在于其卓越的网络性能。它通过优化网络路…

DC-DC产品设计PCB注意事项

DC-DC的电路比LDO会复杂很多,噪声也更大,布局和layout要求更高,layout的好坏直接影响DC-DC的性能,所以了解DC-DC的layout至关重要。 一、Bad Layout EMI,DC-DC的SW管脚上面会有较高的dv/dt, 比较高的dv/d…

Python+Pytest+Allure+Yaml+Jenkins+GitLab接口自动化测试框架详解

PythonPytestAllureYaml接口自动化测试框架详解 编撰人:CesareCheung 更新时间:2024.06.20 一、技术栈 PythonPytestAllureYamlJenkinsGitLab 版本要求:Python3.7.0,Pytest7.4.4,Allure2.18.1,PyYaml6.0 二、环境配置 安装python3.7&…

kafka 消费者 API 使用总结

前言 应用程序使用KafkaConsumer向Kafka订阅主题,并从订阅的主题中接收消息。不同于从其他消息系统读取数据,从Kafka读取数据涉及一些独特的概念和想法。如果不先理解这些概念,则难以理解如何使用消费者API。本文将先解释这些重要的概念&…

你还能顶几天?

A总:你还能顶几天? 汪汪队:顶到奉命撤退的那一天 A总:你在这守散钱点几十年了,从来没跟我提过任何的要求,难道你不困难吗? 汪汪队:有困难,但是我提了有什么用呢&#…

【密码学】面向小白的古典密码基础入门笔记

目录 Mindmap 前言 破译方法 三类古典密码 替换密码 分类 单表替换密码 凯撒密码 简单替换密码 仿射密码 普莱费尔密码 培根密码 猪圈密码 摩斯密码 多表替换密码 维吉尼亚密码 移位密码 滚筒密码 栅栏密码 Mindmap 前言 1.所有古典密码都已不安全 2.密…

晋级国赛!卓翼飞思技术引领,助力辽宁赛区机器人及人工智能大赛圆满收官

近日,第二十六届中国机器人及人工智能大赛—辽宁赛区选拔赛在大连海事大学圆满收官。本次大赛吸引来自辽宁工业大学、大连理工大学等知名高校的10余支队伍参与,充分展现各高校在机器人及人工智能领域的深厚实力和创新精神。其中,由卓翼飞思实…

用ChatGPT快速打造一个专业WordPress网站

作为一个使用HostEase多年的老用户,我想和大家分享一下如何利用HostEase和ChatGPT快速构建一个WordPress网站的经验。这不仅仅是一个简单的操作步骤,更是一次从零到有的实战经历。希望我的分享能给你们带来一些实用的帮助。 获取主机服务和域名 首先&a…

解锁音乐潮流:使用TikTok API获取平台音乐信息

一、引言 TikTok,作为全球领先的短视频社交平台,不仅为用户提供了展示自我、分享生活的舞台,还为用户带来了丰富多样的音乐体验。在TikTok上,音乐与视频内容的结合,为用户带来了全新的视听盛宴。对于音乐制作人、品牌…

阿里云开启ssl证书过程记录 NGINX

🤞作者简介:大家好,我是思无邪,2024 毕业生,某厂 Go 开发工程师.。 🐂我的网站:https://www.yishanicode.top/ ,持续更新,希望对你有帮助。 🐞如果文章或网站…

Unity | Shader基础知识(第十五集:透明效果)

目录 一、前言 二、素材准备 三、准备基础代码 四、准备基础场景 五、SurfaceOutput结构体 六、透明度 七、渲染顺序 八、选错的后果 九、Tags之渲染顺序 十、Cull(正面和反面渲染) 十一、代码汇总 十二、作者的碎碎念 一、前言 因为shader…

Python 面试【高难】

欢迎莅临我的博客 💝💝💝,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

sheng的学习笔记-AI-高斯混合模型(GMM)

AI目录:sheng的学习笔记-AI目录-CSDN博客 需要学习前置知识: 聚类,可参考 sheng的学习笔记-AI-聚类(Clustering)-CSDN博客 EM算法,可参考 sheng的学习笔记-AI-EM算法-CSDN博客 贝叶斯,可参考 sheng的学习笔记-AI-…

SpringBoot-SpringBoot中文文档

简介 Spring Boot是由Pivotal团队提供的一套开源框架,可以简化spring应用的创建及部署。它提供了丰富的Spring模块化支持,可以帮助开发者更轻松快捷地构建出企业级应用。Spring Boot通过自动配置功能,降低了复杂性,同时支持基于J…

DDMA信号处理以及数据处理的流程---跟踪

Hello,大家好,我是Xiaojie,好久不见,欢迎大家能够和Xiaojie一起学习毫米波雷达知识,Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程,本系列文章将从目标生成、信号仿真、测距、测速、cfar检测、测角、目标聚类、目标跟踪这几个模块逐步介绍,这个系列的…

基于Java游戏售卖网站详细设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…