《今天面试了吗》-Spring

本文记录了一次关于Spring框架的面试经历,涵盖了Spring的核心概念,如控制反转(IOC)、依赖注入(DI)、容器、AOP等方面。面试者详细解释了Spring如何通过IOC实现组件解耦,介绍了BeanFactory和ApplicationContext的区别,以及Spring AOP的工作原理和应用场景。面试还讨论了Spring的事务管理,包括隔离级别和传播行为,并指出了事务不生效的常见原因。
摘要由CSDN通过智能技术生成

前言

今天天气不错,我怀着自信的笑容来到某个大厂的研发中心,开启面试的一天。首先我不是毫无准备的,什么java并发,多线程,jvm,分布式,数据库都准备的妥妥的,没想到今天的面试的主题是spring。不过还好,我也准备了...门开了,走来一位拿着mac本,戴眼镜的年轻的小伙子,跟我差不多大吧。然后他示意我坐下,礼貌的说:“欢迎来我们公司面试,今天我们就聊聊spring吧”...

面试环节

  • 面试官:你说下什么是spring?

  • 我:spring是一种轻量级开发框架,旨在提高开发人员的开发效率以及系统的可维护性。我们一般说的spring框架指的是Spring Framework,它是很多模块的集合,使用这些模块可以很方便的协助我们开发。这些模块是:核心容器、数据访问/集成、Web、AOP(面向切面编程)、工具、消息和测试模块。比如:Core Container中的Core组件是Spring所有组件的核心,Beans组件和Context组件是实现IOC和依赖注入的基础,AOP组件用来实现面向切面编程。

  • 面试官:使用Spring框架有什么好处呢?

  • 我:框架能更让我们高效的编程以及更方便的维护我们的系统。

  1. 轻量:Spring是轻量的,相对其他框架来说。
  2. 控制反转:Spring通过控制反转实现了松散耦合,对象给出他们的依赖,而不是创建或查找依赖的对象们。
  3. 面向切面编程(AOP):Spring支持面向切面编程,并且把业务逻辑和系统服务分开。
  4. 容器:Spring包含并管理应用中对象的生命周期和配置。
  5. MVC框架:Spring的WEB框架是个精心设计的框架,是WEB框架的一个很好的替代品。
  6. 事务管理:Spring提供一个持续的事务管理接口,提供声明式事务和编程式事务。
  7. 异常处理:Spring提供方便的API把具体技术相关的异常转化为一致的unchecked异常。
  • 面试官:你第二点提到了spring的控制反转,能解释下吗?
  • 我:首先来解释下控制反转。控制反转(Inversion Of Control,缩写为IOC)是一个重要的面向对象编程的法则来削减程序的耦合问题,也是spring框架的核心。应用控制反转,对象在被创建的时候,由一个调控系统内的所有对象的外界实体,将其所依赖的对象的引用,传递给它。也可以说,依赖被注入到对象中。所以,控制反转是关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。另外,控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛。
    还有几个常见的问题:
  1. 谁依赖谁-当然是应用程序依赖于IOC容器。
  2. 为什么需要依赖-应用程序需要IOC容器来提供对象需要的外部资源。
  3. 谁注入谁-很明显是IOC容器注入应用程序某个对象,应用程序依赖的对象
  4. 注入了什么-就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)
  • 面试官:那IOC与new对象有什么区别吗

  • 我:这就是正转与反转的区别。传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转。而反转则是容器来帮助我们创建并注入依赖对象。

  • 面试官:好的,那IOC有什么优缺点吗?

  • 我:优点:很明显,实现了组件之间的解耦,提高程序的灵活性和可维护性。缺点:对象生成因为是反射编程,在效率上有些损耗。但相对于IOC提高的维护性和灵活性来说,这点损耗是微不足道的,除非某对象的生成对效率要求特别高。

  • 面试官:spring管理这么多对象,肯定需要一个容器吧。你能说下对IOC容器的理解吗?

  • 我:首先来解释下容器:在每个框架中都有个容器的概念,所谓的容器就是将常用的服务封装起来,然后用户只需要遵循一定的规则就可以达到统一、灵活、安全、方便和快速的目的。

  • 我:然后IOC容器是具有依赖注入功能的容器,负责实例化、定位、配置应用程序中的对象以及建立这些对象间的依赖。

  • 面试官:那你能说下IOC容器是怎么工作的吗?

  • 我:首先说下两个概念。

  1. Bean的概念:Bean就是由Spring容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没什么区别了。
  2. 元数据BeanDefinition:确定如何实例化Bean、管理bean之间的依赖关系以及管理bean,这就需要配置元数据,在spring中由BeanDefinition代表。
  • 我:下面说下工作原理:
  1. 准备配置文件:配置文件中声明Bean定义也就是为Bean配置元数据。
  2. 由IOC容器进行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值