Spring经典⾯试题汇总(史上最全整理)
1、基础概念
1.1. 不同版本的 Spring Framework 有哪些主要功能?
Version Feature
Spring 2.5发布于 2007 年。这是第⼀个⽀持注解的版本。
Spring 3.0发布于 2009 年。它完全利⽤了 Java5 中的改进,并为 JEE6 提供了⽀持。
Spring 4.0发布于 2013 年。这是第⼀个完全⽀持 JAVA8 的版本。
1.2. 什么是 Spring Framework?
Spring 是⼀个开源应⽤框架,旨在降低应⽤程序开发的复杂度。
它是轻量级、松散耦合的。
它具有分层体系结构,允许⽤户选择组件,同时还为 J2EE 应⽤程序开发提供了⼀个有凝聚⼒的框架。
它可以集成其他框架,如 Structs、Hibernate、EJB 等,所以⼜称为框架的框架。
1.3. 列举 Spring Framework 的优点。
由于 Spring Frameworks 的分层架构,⽤户可以⾃由选择⾃⼰需要的组件。
Spring Framework ⽀持 POJO(Plain Old Java Object) 编程,从⽽具备持续集成和可测试性。
由于依赖注⼊和控制反转,JDBC 得以简化。
它是开源免费的。
1.4. Spring Framework 有哪些不同的功能?
轻量级 - Spring 在代码量和透明度⽅⾯都很轻便。
IOC - 控制反转
AOP - ⾯向切⾯编程可以将应⽤业务逻辑和系统服务分离,以实现⾼内聚。
容器 - Spring 负责创建和管理对象(Bean)的⽣命周期和配置。
MVC - 对 web 应⽤提供了⾼度可配置性,其他框架的集成也⼗分⽅便。
spring ioc注解事务管理 - 提供了⽤于事务管理的通⽤抽象层。Spring 的事务⽀持也可⽤于容器较少的环境。
JDBC 异常 - Spring 的 JDBC 抽象层提供了⼀个异常层次结构,简化了错误处理策略。
1.5. Spring Framework 中有多少个模块,它们分别是什么?
Spring 核⼼容器 – 该层基本上是 Spring Framework 的核⼼。它包含以下模块:
Spring Core
Spring Bean
SpEL (Spring Expression Language)
Spring Context
数据访问/集成 – 该层提供与数据库交互的⽀持。它包含以下模块:
JDBC (Java DataBase Connectivity)
ORM (Object Relational Mapping)
OXM (Object XML Mappers)
JMS (Java Messaging Service)
Transaction
Web – 该层提供了创建 Web 应⽤程序的⽀持。它包含以下模块:
Web
Web – Servlet
Web – Socket
Web – Portlet
AOP – 该层⽀持⾯向切⾯编程
Instrumentation – 该层为类检测和类加载器实现提供⽀持。
Test – 该层为使⽤ JUnit 和 TestNG 进⾏测试提供⽀持。
⼏个杂项模块:
Messaging – 该模块为 STOMP 提供⽀持。它还⽀持注解编程模型,该模型⽤于从 WebSocket 客户端路由和处理STOMP 消息
Aspects – 该模块为与 AspectJ 的集成提供⽀持。
1.6. 什么是 Spring 配置⽂件?
Spring 配置⽂件是 XML ⽂件。该⽂件主要包含类信息。它描述了这些类是如何配置以及相互引⼊的。但是,XML 配置⽂件冗长且更加⼲净。如果没有正确规划和编写,那么在⼤项⽬中管理变得⾮常困难。
1.7. Spring 应⽤程序有哪些不同组件?
Spring 应⽤⼀般有以下组件:
接⼝ - 定义功能。
Bean 类 - 它包含属性,setter 和 getter ⽅法,函数等。
Spring ⾯向切⾯编程(AOP) - 提供⾯向切⾯编程的功能。
Bean 配置⽂件 - 包含类的信息以及如何配置它们。
⽤户程序 - 它使⽤接⼝。
1.8. 使⽤ Spring 有哪些⽅式?
使⽤ Spring 有以下⽅式:
作为⼀个成熟的 Spring Web 应⽤程序。
作为第三⽅ Web 框架,使⽤ Spring Frameworks 中间层。
⽤于远程使⽤。
作为企业级 Java Bean,它可以包装现有的 POJO(Plain Old Java Objects)。
2、依赖注⼊(Ioc)
2.1. 什么是 Spring IOC 容器?
Spring 框架的核⼼是 Spring 容器。容器创建对象,将它们装配在⼀起,配置它们并管理它们的完整⽣命周期。Spring 容器使⽤依赖注⼊来管理组成应⽤程序的组件。
容器通过读取提供的配置元数据来接收对象进⾏实例化,配置和组装的指令。该元数据可以通过 XML,Java 注解或 Java 代码提供。
2.2. 什么是依赖注⼊?
在依赖注⼊中,您不必创建对象,但必须描述如何创建它们。您不是直接在代码中将组件和服务连接在⼀起,⽽是描述配置⽂件中哪些组件需要哪些服务。由 IoC 容器将它们装配在⼀起。
2.3. 可以通过多少种⽅式完成依赖注⼊?
通常,依赖注⼊可以通过三种⽅式完成,即:
构造函数注⼊
setter 注⼊
接⼝注⼊
在 Spring Framework 中,仅使⽤构造函数和 setter 注⼊。
2.4. 区分构造函数注⼊和 setter 注⼊。
构造函数注⼊setter 注⼊
没有部分注⼊有部分注⼊
构造函数注⼊setter 注⼊
构造函数注⼊setter 注⼊
不会覆盖 setter 属性会覆盖 setter 属性任意修改都会创建⼀个新实例任意修改不会创建⼀个新实例适⽤于设置很多属性适⽤于设置少量属性2.5. spring 中有多少种 IOC 容器?
BeanFactory - BeanFactory 就像⼀个包含 bean 集合的⼯⼚类。它会在客户端要求时实例化 bean。
ApplicationContext - ApplicationContext 接⼝扩展了 BeanFactory 接⼝。它在
BeanFactory 基础上提供了⼀些额外的功能。
2.6. 区分 BeanFactory 和 ApplicationContext。
BeanFactory ApplicationContext
它使⽤懒加载它使⽤即时加载它使⽤语法显式提供资源对象它⾃⼰创建和管理资源对象
不⽀持国际化⽀持国际化
不⽀持基于依赖的注解⽀持基于依赖的注解2.7. 列举 IoC 的⼀些好处。
IoC 的⼀些好处是:
它将最⼩化应⽤程序中的代码量。
它将使您的应⽤程序易于测试,因为它不需要单元测试⽤例中的任何单例或 JNDI 查机制。
它以最⼩的影响和最少的侵⼊机制促进松耦合。
它⽀持即时的实例化和延迟加载服务。
2.8. Spring IoC 的实现机制。
Spring 中的 IoC 的实现原理就是⼯⼚模式加反射机制。
⽰例:
interface Fruit {
public abstract void eat();
}
class Apple implements Fruit {
public void eat(){
System.out.println("Apple");
}
}
class Orange implements Fruit {
public void eat(){
System.out.println("Orange");
}
}
class Factory {
public static Fruit getInstance(String ClassName){
Fruit f=null;
try{
f=(Fruit)Class.forName(ClassName).newInstance();
}catch(Exception e){
e.printStackTrace();
}
return f;
}
}
class Client {
public static void main(String[] a){
Fruit Instance("io.github.dunwu.spring.Apple");
if(f!=null){
f.eat();
}
}
}
3、Beans
3.1. 什么是 spring bean?
它们是构成⽤户应⽤程序主⼲的对象。
Bean 由 Spring IoC 容器管理。
它们由 Spring IoC 容器实例化,配置,装配和管理。
Bean 是基于⽤户提供给容器的配置元数据创建。
3.2. spring 提供了哪些配置⽅式?
基于 xml 配置
bean 所需的依赖项和服务在 XML 格式的配置⽂件中指定。这些配置⽂件通常包含许多 bean 定义和特定于应⽤程序的配置选项。它们通常以 bean 标签开头。例如:
<bean id="studentbean"class="org.edureka.firstSpring.StudentBean">
<property name="name"value="Edureka"></property>
</bean>
基于注解配置
您可以通过在相关的类,⽅法或字段声明上使⽤注解,将 bean 配置为组件类本⾝,⽽不是使⽤ XML 来描述 bean 装配。默认情况
下,Spring 容器中未打开注解装配。因此,您需要在使⽤它之前在 Spring 配置⽂件中启⽤它。例如:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。