Spring及相关框架的重要的问题

news2024/9/20 1:12:39

Java框架

问题一:Spring框架中的单例bean是线程安全的吗?

 看下图,不能被修改的成员变量就是无状态的类,无状态的类没有线程安全问题,所以在开发中尽量避免可修改的成员变量。

回答:不是线程安全的,Spring中有一个@Scope注解,默认的值是singleton,单例的,因为一般在Spring的bean中都是注入无状态的对象,没有线程安全问题;而如果在bean中定义了可修改的成员变量,则要考虑线程安全问题,可以使用多例或加锁来解决。

问题二:什么是AOP,有没有在项目中使用到AOP?Spring的事务如何实现?

将非业务逻辑代码(交叉业务)提取出来形成一个独立的横向切面(将业务逻辑看成是纵向的),以横向交叉的方式应用到业务流程中,使代码的复用性增强,降低模块间的耦合度,同时提高系统的可维护性。

常见的AOP使用场景:

  • 记录操作日志
  • 缓存处理
  • Spring中内置的事务处理

在后台开发中,都需要记录操作日志:

Spring的事务其本质是通过AOP实现的,对方法前后进行拦截,在执行方法之前开启事务,在执行完目标方法后根据执行情况提交或者回滚事务。

列举一些重要的Spring模块?
Spring Core:Spring框架的核心,提供了控制反转(IoC)容器和依赖注入(DI)功能。

Spring Beans:定义了Spring的beans的配置方式,包括基于注解和XML的配置。

Spring Context:提供了一种更加丰富的框架应用上下文,包括国际化、事件传播、资源访问等。

Spring AOP:面向切面编程模块,允许开发者定义横切关注点,如日志记录、事务管理等。

Spring DAO:数据访问对象模块,提供了对JDBC的抽象,简化了数据访问层的编码。

Spring JDBC:提供了对Java数据库连接(JDBC)的抽象和简化,使得数据库操作更加方便。

Spring ORM:对象关系映射模块,支持与Hibernate、JPA、MyBatis等ORM工具的集成。

Spring TX:事务管理模块,提供了声明式和编程式事务管理的支持。

BeanFactory 和 ApplicationContext有什么区别?
是spring的核心接口,都可以作为容器,ApplicationContext是BeanFactory的子接口。
BeanFactory: 是spring最底层的接口,包含各种Bean的定义和Bean的管理。
ApplicationContext: 作为BeanFactory的派生,除了有BeanFactory的功能以外,还提供了更多的功能。

区别:

BeanFactroy采用的是延迟加载形式来注入Bean的,使用到bean才会加载。ApplicationContext一次性加载所有bean。
BeanFactory需要手动注册,而ApplicationContext则是自动注册。
BeanFactory不支持国际化,ApplicationContext支持国际化(实现MessageSource接口)。
BeanFactory不支持AOP,ApplicationContext支持AOP,可以与Spring的AOP框架集成,提供声明式事务管理

问题三:SpringMVC的执行流程?

Spring 的常见注解有哪些?

第一类是:声明bean,有@Component、@Service、@Repository、@Controller

第二类是:依赖注入相关的,有@Autowired、@Qualifier、@Resourse

第三类是:设置作用域 @Scope

第四类是:spring配置相关的,比如@Configuration,@ComponentScan 和 @Bean

第五类是:跟aop相关做增强的注解 @Aspect,@Before,@After,@Around,@Pointcut

SpringMVC常见的注解有哪些?

有@RequestMapping:用于映射请求路径;

@RequestBody:注解实现接收http请求的json数据,将json转换为java对象;

@RequestParam:指定请求参数的名称;

@PathViriable:从请求路径下中获取请求参数(/user/{id}),传递给方法的形式参数;@ResponseBody:注解实现将controller方法返回对象转化为json对象响应给客户端。@RequestHeader:获取指定的请求头数据,还有像@PostMapping、@GetMapping这些。

Springboot自动配置原理

在Spring Boot项目中的引导类上有一个注解@SpringBootApplication,这个注解是对三个注解进行了封装,分别是:

  • @SpringBootConfiguration

  • @EnableAutoConfiguration

  • @ComponentScan

其中@EnableAutoConfiguration是实现自动化配置的核心注解。

该注解通过@Import注解导入对应的配置选择器。关键的是内部就是读取了该项目和该项目引用的Jar包的的classpath路径下META-INF/spring.factories文件中的所配置的类的全类名。

在这些配置类中所定义的Bean会根据条件注解所指定的条件来决定是否需要将其导入到Spring容器中。

一般条件判断会有像@ConditionalOnClass这样的注解,判断是否有对应的class文件,如果有则加载该类,把这个配置类的所有的Bean放入spring容器中使用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Drizzle ORM使用Azure PostgreSQL数据库迁移失败

执行 npx drizzle-kit migrate 命令报错: No config path provided, using default drizzle.config.ts Reading config file E:\nextjs-cloudflare-drizzle\drizzle.config.ts Using postgres driver for database querying [⡿] applying migrations...PostgresEr…

Intersection Observer API 帮你搞定前端滚动问题

前言 当我们在做需求时,可能经常会遇到很多跟页面的滚动有关的需求。例如 图片的懒加载:我们希望只加载用户当前视图窗口的图片,而未进入到视图窗口的图片,只有在进入到视图窗口时才进行加载,以提高页面响应速度&…

简单报表示例

简单报表 概述 简单表格报表:简单的表格报表。 应用场景 如下图所示,简单展示数据 示例说明 数据准备 在数据面板中添加数据集,可选择Json数据集和API服务数据集。Json数据集输入如下图所示: [{"到货日期":&qu…

工业智能网关在制造业数字化转型中的应用分享-天拓四方

随着工业4.0和物联网技术的飞速发展,工业智能网关已成为连接现场设备、实现数据采集与远程监控的关键节点。本文将以一个实际使用案例为蓝本,深入探讨工业智能网关的应用价值、技术特点以及实施效果,旨在为读者呈现一个清晰、专业且实操性强的…

vue项目打包问题

缓存导致打包后js文件404 修改vue.config.js打包输出文件名为动态,例如取当前时间戳。 在index.html文件添加meta标签设置不缓存。 更新完包,假如用户此刻正访问某一个页面时,访问的包还是原来的情况导致出现bug 解决VUE项目更新后需要客户手…

渲染引擎实践 - UnrealEngine引擎的 GLContext 创建过程

一:概述: 本文分析下 UnrealEngine 启动过程中创建多少个 OpenGL Context,以及每个 Context 的作用。 基于 UnrealEngine 4.25 环境。 二:临时Context 1. PreInit -> PreInitPreStartupScreen -> PreloadResolutionSettings, 用于检查图形窗口分辨率 2. PreInit -&…

Nmap——网络扫描的强大利器

一、引言 在网络安全和管理的领域中,了解网络的拓扑结构、设备状态以及开放的服务端口等信息至关重要。Nmap(Network Mapper)作为一款功能强大的网络扫描工具,为我们提供了深入探索网络的能力。本文将详细介绍 Nmap 的特点、功能…

三款新手剪辑软件分享,告别复杂的达芬奇剪辑软件

你们知道吗?一个视频能不能火,除了内容要够硬核,剪辑也是门大学问呢!之前尝试过达芬奇剪辑,发现我不是很会用,然后最近我轮番上阵,试用了三款神器,来来来,让我给你们说说…

回归评价指标

这里写目录标题 1. 均方误差MSE2. 均方根误差RMSE3. 平均绝对误差MAE4. R^2^5. 调整后R^2^1. 均方误差MSE 回归数据和原始数据误差的平方和/原始数据个数平方的原因:不平方正负误差会抵消,对大误差更为敏感,在一些场景下更能凸显出模型预测的不准确性越接近于0,模型预测能力…

前端(三):Ajax

一、Ajax Asynchronous JavaScript And XML,简称Ajax,是异步的JavaScript和XML。 作用:数据交换,通过Ajax可以给服务器发送请求,并获取服务器响应的数据。异步交互:可以在不重新加载整个页面的情况下&…

雷达气象学(2)——雷达电磁波的衰减

文章目录 2.1 衰减的概念2.2 气体对电磁波的衰减2.3 云对电磁波的衰减2.4 雨对电磁波的衰减2.5 雪对电磁波的衰减2.5.1 干雪对电磁波的衰减2.5.2 湿雪对电磁波的衰减 2.6 冰雹对电磁波的衰减 2.1 衰减的概念 衰减是电磁波能量沿传播路径减弱的现象。造成衰减的原因是当电磁波投…

8.9套题

A. 猴猴吃苹果 题意:给定根节点k,求访问点的顺序,使得每次从上一个点到当前点的权值最大。访问过的点权值为0。权值一样时,输出最小编号 思路:由于是双向边,先求根节点到每一个节点的距离值。在第一轮中&…

WPF篇(3)- WrapPanel控件(瀑布流布局)+DockPanel控件(停靠布局)

WrapPanel控件(瀑布流布局) WrapPanel控件表示将其子控件从左到右的顺序排列,如果第一行显示不了,则自动换至第二行,继续显示剩余的子控件。我们来看看它的结构定义: public class WrapPanel : Panel {pub…

rocketMQ5.0事务消息实战

事务消息逻辑 首先我们来docker 部署rocketMQ与rocketMQDashBoard docker ps查看rocketMQ 容器名称 docker ps 进入容器内部 docker exec -it rmqnamesrv /bin/bash 创建事务消息 sh mqadmin updateTopic -c DefaultCluster -t TRANSACTIONTopic -n 127.0.0.1:9876 -a mes…

Python开源项目月排行 2024年7月

#2024年7月2024年8月2日1the-art-of-command-line一个全面而简洁的命令行使用指南。它旨在帮助工程师提高在命令行环境下的熟练程度和生产力。项目涵盖了从基础到高级的各种命令行技巧和知识,项目的内容涵盖了基础知识、日常使用、文件处理、系统调试等多个方面&…

图像自动化保存工具:Python脚本开发指南

引言 在数字化时代,图像已成为信息传递的重要媒介。无论是社交媒体、新闻网站还是电子商务平台,图像的自动化处理和保存都是提升用户体验和工作效率的关键。本文将深入探讨如何使用Python脚本实现从百度图片等搜索引擎批量下载并保存图像文件的高级应用…

第36集《大佛顶首楞严经》

请大家打开讲义第八十页,子三,明鼻识界即藏性。 蕅益大师讲到,我们修学大乘佛法,有一句话是很重要的。他说:“未开圆解,不应辄论修证。”说一个菩萨你没有真正地大彻大悟开圆顿解,你没有资格谈…

K8s问题案例分析

1.worker节点宕机,请说明一下pod的驱逐流程: k8s有一个节点控制器,节点控制器在一段时间内无法和kubelet通信,那么就会给节点打上unknown 状态,并自动创建NoExecute污点,避免调度器调度新的pod到该节点。同时已经在这…

2024年6月scratch图形化编程等级考试三级真题

202406 青少年软件编程等级考试Scratch三级真题 试卷总分数:100分 考试时长:60 分钟 第 1 题 运行程序后,角色的x坐标是?( ) A:99 B:100 C:199 D:200 正…

Shell 脚本中的循环语句、函数与数组

文章目录 Shell 脚本中的循环语句、函数与数组1. for 循环1.1 for 循环语法结构1.1.1 列表循环1.1.2 不带列表循环1.1.3 类C风格的for循环 1.2 案例1.2.1 打印1-5这5个数字1.2.2 打印5次hello world1.2.3 打印abcde1.2.4 输出0-50之间的偶数 1.3 小技巧:花括号 {} 和…