Spring相关|Spring 和 Spring MVC 面试题汇总---《绝绝子》

什么是Spring
Spring相关|Spring 和 Spring MVC 面试题汇总---《绝绝子》
文章图片

Spring 是一个开源应用框架,旨在降低应用程序开发的复杂度。它是轻量级、松散耦合的。它具有分层体系结构,允许用户选择组件,它可以集成其他框架,如熟知的 Struts2、Mybatis等,所以又称为框架的框架。

不同版本的Spring有哪些主要功能?
Version(版本) Feature(特点)
Spring 2.5 2007年发布,这是第一个支持注解的版本。
Spring 3.0 2009年发布,它利用了java5中的改进,并为JEE6提供了支持 。
Spring 4.0 2013年发布,这是第一个完全支持JAVA8的版本。
Spring的优点?
由于Spring的分层架构,用户可以自由选择自己需要的组件。 依赖注入和控制反转,JDBC得以简化,它是开源免费的。

Spring有哪些不同的功能?
轻量级
Srping在代码量和透明度方面都很轻便。

IOC
控制反转。

AOP
面向切面编程可以将应用业务逻辑和系统服务分离,以实现高内聚。

容器
Spring 负责创建和管理对象(Bean)的生命周期和配置。

MVC
对Web应用提供了高度可配置性,其他框架的集成也十分方便。

事务管理
提供了用于事务管理的通用抽象层。Spring的失误支持也可用于容器较少的环境。

JDBC异常
Spring的JDBC抽象层提供了一个异常层次结构,简化了错误处理策略。

什么是Spring的配置文件?
Spring配置文件是XML文件,该文件主要包含类信息。 它描述了这些类是如何配置以及相互引入的。

Spring应用程序有哪些不同的组件?
接口
定义功能。

Bean类
包含属性,setter和getter方法,函数等。

AOP
提供面向切面编程的功能。

Bean配置文件
包含类的信息以及如何配置它们。

用户程序
使用接口。

什么是Spring IOC (依赖注入) ?
在依赖注入中,不需要创建对象,但必须描述配置文件中哪些组件需要哪些服务,由IOC容器将它们装配在一起。

依赖注入有多少种方式?
构造函数注入setter注入接口注入
在Spring中,仅使用构造函数和setter注入。

构造函数setter的区别?
构造函数注入 setter注入
没有部分注入 有部分注入
不会覆盖setter属性 会覆盖setter属性
任意修改都会创建一个新实例 任意修改都不会创建一个新实例
适用于设置很多属性 适用于设置少量属性
Spring中有多少种IOC容器?
BeanFactory
BeanFactory就像一个包含bean集合的工厂类。 它会在客户端要求实例化bean。

ApplicationContext
ApplicationContext接口扩展了BeanFactory接口。 它在BeanFactory基础上提供了一些额外的功能。

BeanFactoryApplicationContext的区别?
BeanFactory BeanFactory
懒加载 即时加载
语法显示提供资源对象 自己创建和管理资源对象
不支持国际化 支持国际化
不支持基于依赖的注解 支持基于依赖的注解
IOC的好处?
它可以最小化应用程序中的代码量,易于测试,不需要单元测试用例中的任何单例,松耦合,支持即时的实例化和延迟加载服务。

IOC的实现机制?
工厂模式加反射机制。

什么是Spring bean
是构成用户应用程序主干的对象。 Bean由Spring IOC 容器管理,由Spring IOC 容器实例化,配置,装配和管理。 Bean是基于用户提供给容器的配置源数据创建。

Spring 提供了哪些配置方式?
XML配置注解配置JAVA-API配置
什么是Spring 装配?
当bean在Spring容器中组合在一起时,它被称为装配或bean装配。 Spring容器需要知道什么bean以及容器应该如何使用依赖注入来讲bean绑定在一起,同时装配bean。

自动装配有哪些方式?
no
这是默认设置,表示没有自动装配。应使用显示bena引用进行装配。

byName
根据bean的名称注入对象依赖项。

byType
根据类型注入对象依赖项。

@Component@Repository@Service@Controller的区别?
@Component:将java类标记为bean,由Spring工厂自动创建对象。@Repository: 为Dao提供了额外的好处,将Dao导入IOC容器,并使未经检查的异常有资格转换为 Spring DataAccessException。@Service: 是组件注解的特化,可以在业务层中使用。@Controller:将一个类标记为Spring Web MVC控制器。 标有它的bean 会自动导入到IOC容器中。

@Autwired注解的作用?
用于属性,setter方法,构造函数上,自动装配bean。 默认情况下,它是类型驱动的注入。

@RequestMapping注解的作用?
用于将特定HTTP请求方法映射到将处理相应请求的控制器中的特定类/方法。此注释可应用于两个级别: 类级别: 映射请求的URL。 方法级别: 映射URL以及HTTP请求方法。

Spring Dao有什么用?
Spring Dao 使得JDBC这样的数据访问技术更容易以一种统一的方式工作。 允许用户用于在持久性技术之间切换。 还允许在编写代码时,无需考虑捕获每种技术不同的异常。

Spring Dao 抛出的异常 :
Spring相关|Spring 和 Spring MVC 面试题汇总---《绝绝子》
文章图片

Spring 支持的事务管理类型有哪些?
程序化事务管理
在此过程中,在编程的帮助下管理事务。 提供了极大的灵活性,但维护起来非常困难。

【Spring相关|Spring 和 Spring MVC 面试题汇总---《绝绝子》】声明式事务管理
在此,事务管理与业务代码分离。 仅使用注解或基于 XML 的配置来管理事务。

什么是AOP
AOP(Aspect-Oriented Programming),面向切面编程。 它与OOP( Object-Oriented Programming, 面向对象编程) 相辅相成。 在 OOP 中, 我们以类(class)作为我们的基本单元, 而 AOP 中的基本单元是 Aspect(切面)。

什么是通知(Advice)?
特定JoinPoint(连接点)处的Aspect所采取的动作称为Advice。 Spring AOP使用一个Advice作为拦截器,在JoinPoint "周围"维护一系列的拦截器。

有哪些类型的通知(Advice)?
Before :
这些类型的 Advice 在 joinpoint 方法之前执行,并使用@Before 注解标记进行配置。

After Returning :
这些类型的 Advice 在连接点方法正常执行后执行,并使用@AfterReturning 注解标记进行配置。

After Throwing :
这些类型的 Advice 仅在 joinpoint 方法通过抛出异常退出并使用 @AfterThrowing 注解标记配置时执行。

After (finally) :
这些类型的 Advice 在连接点方法之后执行,无论方法退出是正常还是异常返回,并使用 @After 注解标记进行配置。

Around :
这些类型的 Advice 在连接点之前和之后执行,并使用@Around 注解标记进行配置。

AOP有哪些实现方式?
静态代理
指使用 AOP 框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类,因此也称为编译时增强。

动态代理
在运行时在内存中“临时”生成 AOP 动态代理类,因此也被称为运行时增强。

如何理解Spring中的代理
将 Advice 应用于目标对象后创建的对象称为代理。在客户端对象的情况下,目标对象和代理对象是相同的。

Spring相关|Spring 和 Spring MVC 面试题汇总---《绝绝子》
文章图片

Spring MVC框架有什么用?
Spring Web MVC 框架提供 模型-视图-控制器 架构和随时可用的组件,用于开发灵活且松散耦合的 Web 应用程序。

DispatcherServlet 的工作流程?
Spring相关|Spring 和 Spring MVC 面试题汇总---《绝绝子》
文章图片

1、向服务器发送 HTTP 请求,请求被前端控制器 DispatcherServlet 捕获。2、 DispatcherServlet 根据 -servlet.xml 中的配置对请求的 URL 进行解析,得请求资源标识符(URI)。 然后根据该 URI,调用 HandlerMapping获得该 Handler 配置的所有相关的对象(包括 Handler 对象以及 Handler 对象对应的拦截器)。 最后以 HandlerExecutionChain 对象的形式返回。3、 DispatcherServlet 根据获得的 Handler,选择一个合适的HandlerAdapter。 (附注:如果成功获得 HandlerAdapter 后,此时将开始执行拦截器的 preHandler(...)方法)。4、提取 Request 中的模型数据,填充 Handler 入参,开始执行 Handler( Controller)。5、Handler(Controller)执行完成后,向 DispatcherServlet 返回一个ModelAndView 对象。6、根据返回的 ModelAndView,选择一个适合的 ViewResolver(必须是已经注册到 Spring 容器中的 ViewResolver)返回给 DispatcherServlet。7、 ViewResolver 结合 Model 和 View,来渲染视图。8、视图负责将渲染结果返回给客户端。

什么是WebApplicationContext
WebApplicationContext 是 ApplicationContext 的扩展。 它具有 Web 应用程序所需的一些额外功能。 它与普通的 ApplicationContext 在解析主题和决定与哪个 servlet 关联的能力方面有所不同。

    推荐阅读