Spring的常见面试问题

1、Spring是什么

  • Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
  • Spring 框架是一个分层架构,由 7 个定义好的模块组成。
  • Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式 。

2、Spring的模块组成

  1. Spring Core:核心容器提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,他是工厂模式的实现。BeanFactory使用控制反转模式将应用程序的配置和依赖性规范与实际的应用程序代码分开
  2. Spring Context:Spring上下文是一个配置文件,向Spring框架提供上下文信息。Spring上下文包括企业服务,例如JNDI、EJB、电子邮件、国际化、校验和调度功能
  3. Spring AOP:通过配置管理特性,SpringAOP模块直接将面向切面的功能,集成到了Spring框架中。所以,很容易的用Spring框架管理任何支持AOP的对象。SpringAOP模块为基于Spring的应用程序中的对象提供了事务管理服务,通过使用SpringAOP不用依赖组件,就可以将声明性事务管理集成到应用管理程序中。
  4. Spring DAO:JDBC DAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。SpringDAO的面向JDBC的异常遵从通用的DAO异常层次结构
  5. Spring ORM:Spring框架中插入了若干个ORM框架,从而提供了ORM的对象关系工具,其中包括JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
  6. Spring Web:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
  7. Spring MVC:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

什么是Spring IOC

  1. IOC容器:实际上就相当于一个map,里面存的是对象,我们通过在xml中配置bean或注解的方式来存放对象(@repository、@server、@controller、@component)
  2. 控制反转:没有引入IOC容器,我们需要对象时,需要new一个,引入IOC后,我们将对象都放在容器内,当我们需要对象后,可以通过IOC容器来创建,由主动变为被动,将对象的控制权交给了IOC(相当于婚介所)
  3. 依赖注入:IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。

什么是Spring AOP

  1. 将程序中的交叉业务逻辑,封装成一个切面,然后注入到具体的逻辑业务中,可以对某个对象或者方法进行增强
  2. 相关术语:
  • 连接点(Joinpoint) :连接点表示应用执行过程中能够插入切面的一个点,这个点可以是方法的调用、异常的抛出。在 Spring AOP 中,连接点总是方法的调用。
  • 切点(PointCut): 每个程序的连接点有多个,如何定位到某个感兴趣的连接点,就需要通过切点来定位。比如,连接点–数据库的记录,切点–查询条件
    切点用于来限定Spring-AOP启动的范围,通常我们采用表达式的方式来设置,所以关键词是范围
  • 增强(Advice): 增强是织入到目标类连接点上的一段程序代码。在Spring中,像BeforeAdvice等还带有方位信息
  • 通知是直译过来的结果,我个人感觉叫做“业务增强”更合适 对照代码就是拦截器定义的相关方法,通知分为如下几种:
    • 前置通知(before):在执行业务代码前做些操作,比如获取连接对象
    • 后置通知(after):在执行业务代码后做些操作,无论是否发生异常,它都会执行,比如关闭连接对象
    • 异常通知(afterThrowing):在执行业务代码后出现异常,需要做的操作,比如回滚事务
    • 返回通知(afterReturning),在执行业务代码后无异常,会执行的操作
    • 环绕通知(around),这个目前跟我们谈论的事务没有对应的操作,所以暂时不谈
  • 目标对象(Target) 需要被加强的业务对象
  • 织入(Weaving): 织入就是将增强添加到对目标类具体连接点上的过程。
  • 切面(Aspect): 切面由切点和增强组成,SpringAOP就是将切面所定义的横切逻辑织入到切面所制定的连接点中。
    在这里插入图片描述

BeanFactory和ApplicationContext有什么区别?

是Spring的两个核心接口,都可以当做Spring的容器,ApplicationContext是BeanFactory的子类

  1. BeanFactory是延迟加载的方式来注入Bean的,只有在使用Bean时,才会加载实例化(速度慢,节省空间)
  2. ApplicationContext在容器启动后,就会创建所有的Bean(占空间,速度快)

猜你喜欢

转载自blog.csdn.net/ilvjiale/article/details/115358130