首页 > 其他分享 >【面试专题】Spring篇①

【面试专题】Spring篇①

时间:2023-10-31 12:36:17浏览次数:29  
标签:专题 对象 Spring 面试 Bean AOP 方法 注入

目录


1.你知道 Spring 框架中有哪些重要的模块吗?

2. 谈谈你对 IOC 的认识。

3. 谈谈你对 AOP 的认识。

4.在实际写代码时,有没有用到过 AOP?用过的话是在什么地方或者什么场景下?

5.Spring中的事务是如何实现的

6.Transaction 在哪些情况下可能会失效?

7.说说你对 Spring 中的 Bean 的理解。

8. 有哪些方法往 Spring 容器中添加 Bean。

9.Spring框架中的单例bean是线程安全的吗?

10.Spring的bean的生命周期


1.你知道 Spring 框架中有哪些重要的模块吗?

(1)核心层
Core Container:核心容器,这个模块是Spring最核心的模块,其他的都需要依赖该模块。

(2)AOP层
AOP:面向切面编程,它依赖核心层容器,目的是在不改变原有代码的前提下对其进行功能增强
Aspects:AOP是思想,Aspects是对AOP思想的具体实现

(3)数据层
Data Access:数据访问,Spring全家桶中有对数据访问的具体实现技术
Data Integration:数据集成,Spring支持整合其他的数据层解决方案,比如Mybatis
Transactions:事务,Spring中事务管理是Spring AOP的一个具体实现

(4)Web层
提供创建 Web 应用程序的能力

(5)Test层
Spring主要整合了Junit来完成单元测试和集成测试
 

【面试专题】Spring篇①_spring boot

2. 谈谈你对 IOC 的认识。

IoC(Inversion of Control)是控制反转的意思,这是一种面向对象编程的设计思想。在不采用这种思想的情况下,我们需要自己维护对象与对象之间的依赖关系,很容易造成对象之间的耦合度过高,在一个大型的项目中这十分的不利于代码的维护。IoC则可以解决这种问题,它可以帮我们维护对象与对象之间的依赖关系,降低对象之间的耦合度。

说到IoC就不得不说DI(Dependency Injection),DI是依赖注入的意思,它是IoC实现的实现方式,就是说IoC是通过DI来实现的。由于IoC这个词汇比较抽象而DI却更直观,所以很多时候我们就用DI来代替它,在很多时候我们简单地将IoC和DI划等号,这是一种习惯。而实现依赖注入的关键是IoC容器,它的本质就是一个工厂。

在具体的实现中,主要由三种注入方式:

  1. 构造方法注入
    就是被注入对象可以在它的构造方法中声明依赖对象的参数列表,让外部知道它需要哪些依赖对象。然后,IoC Service Provider会检查被注入的对象的构造方法,取得它所需要的依赖对象列表,进而为其注入相应的对象。构造方法注入方式比较直观,对象被构造完成后,即进入就绪状态,可以马上使用。
  2. setter方法注入
    通过setter方法,可以更改相应的对象属性。所以,当前对象只要为其依赖对象所对应的属性添加setter方法,就可以通过setter方法将相应的依赖对象设置到被注入对象中。setter方法注入虽不像构造方法注入那样,让对象构造完成后即可使用,但相对来说更宽松一些, 可以在对象构造完成后再注入。
  3. 接口注入
    相对于前两种注入方式来说,接口注入没有那么简单明了。被注入对象如果想要IoC Service Provider为其注入依赖对象,就必须实现某个接口。这个接口提供一个方法,用来为其注入依赖对象。IoC Service Provider最终通过这些接口来了解应该为被注入对象注入什么依赖对象。相对于前两种依赖注入方式,接口注入比较死板和烦琐。

总体来说,构造方法注入和setter方法注入因为其侵入性较弱,且易于理解和使用,所以是现在使用最多的注入方式。而接口注入因为侵入性较强,近年来已经不流行了。

标签:专题,对象,Spring,面试,Bean,AOP,方法,注入
From: https://blog.51cto.com/u_15011668/8103604

相关文章

  • 【面试专题】Java核心基础篇②
    目录1.接口和抽象类有什么区别?2.两个对象的hashCode()相同,则equals()也一定为true,对吗?3.说一说hashCode()和equals()的关系4.为什么要重写hashCode()和equals()?5.==和equals()有什么区别?6.简单聊聊什么是深拷贝?什么是浅拷贝?7.简单讲讲你对Java中的异常的理解?8.遇到过异常吗,如......
  • java实现文件夹上传功能实例代码(SpringBoot框架)
    前言有时我们后台管理等服务可能会有这样一个简单需求,就是根据文件夹将整个文件夹下的所有资源都上传到我们的服务器上,本人也是搜索了大量资料,最终以最简单便捷的方式实现该功能,具体操作步骤如下一、前端如何设置上传组件并将资源上传到后台服务这里的项目框架为若依VUE版本......
  • SpringBoot中,为什么不直接使用一个Service写功能,而是Service接口+ServiceImpl实现类?
    当项目比较简单的时候,需求明确,变更不频繁或者几乎不怎么修改的时候,用第一种就好了当项目比较复杂,需求变更多的时候,用第二种比较好service层=service接口+serviceImpl实现类这种方式好处:1、解耦合2、便于扩展例如:publicinterfaceHumanService{StringgetName();}@Serv......
  • Gradle8.4构建SpringBoot多模块项目
    Gradle8.4构建SpringBoot多模块项目一、基本1、版本这个版本是Jdk8最后一个SpringBoot版本软件版本Gradle8.4SpringBoot2.7.15JDK82、Gradle基本介绍2.1、使用Wrapper方式构建好处:统一gradle的版本好处:不用安装gradle就可以使用Maven也是一样的......
  • 【面试题】你理解中JS难理解的基本概念是什么?
    作用域与闭包作用域作用域是当前的执行上下文,值和表达式在其中“可见”或可被访问。如果一个变量或表达式不在当前的作用域中,那么它是不可用的。作用域也可以堆叠成层次结构,子作用域可以访问父作用域,反过来则不行。————MDN作用域最重要的特点是:子作用域可以访问父作用域,反之则......
  • 【面试题】详解JavaScript中的Map()
    JavaScript中的Map()JavaScript是一种动态、解释性的编程语言,用于开发web上的动态页面和交互式应用程序。与其他编程语言相比,JavaScript拥有更加灵活的内置数据类型,并且拥有更高级别的调试和错误处理工具。JavaScript的核心特征之一就是其内置的Map()数据结构,本文将详细介绍JavaScr......
  • 【面试题】前端面试复习6---性能优化
    性能优化一、性能指标要在Chrome中查看性能指标,可以按照以下步骤操作:打开Chrome浏览器,并访问你想要测试的网页。使用快捷键F12或右键点击页面并选择“检查”,打开开发者工具。在开发者工具中,切换到“Performance”(性能)选项卡。点击开始录制按钮,即红色的圆点按钮。开始加载页......
  • 一文详解 springboot 项目启动时异步执行初始化逻辑
    你知道的越多,你不知道的越多点赞再看,养成习惯文章目录前言代码实现定义异步处理工具类实现java线程池新建AppInit实现ApplicationRunner接口完成启动项目时异步数据初始化前言前面的工作中,为了提高地区数据的响应时间,需要加载全国区划数据到redis中缓存起来,这个过程希......
  • css面试题
    1.css中的哪些单位 绝对单位:  px:像素单位 相对单位:  em:相对父元素字体大小  rem:相对根元素字体大小2.居中的方式1.水平居中1.设置盒子:margin:0auto2.display: flex2.垂直居中   1.vertical-align:middle 实现居中,1. display:i......
  • 【专题】2022年智能汽车行业数字化人才白皮书报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34111原文出处:拓端数据部落公众号随着新一轮技术革命和产业变革的推动,以及国家政策的大力扶持,电动化、智能化、网联化已经成为汽车行业发展的新趋势。在这种背景下,各大企业纷纷争夺数字化人才,以推动产品的规模化落地和商业化创新应用。阅读原文,获......