求职面试 - Spring 面试知识点

Spring 面试知识点

1. Spring 特点

Spring 主要有如下特点:

  1. 轻量级:Spring 是非侵入式,其中的对象不依赖 Spring 的特定类;
  2. 控制反转(IoC):通过 IoC,促进了低耦合,一个对象依赖的其他对象通过被动的方式传递进来,而不用该对象主动创建或查找;
  3. 面向切面(AOP):支持面向切面编程,将应用业务逻辑层和系统服务层分开;
  4. 容器:包含并管理应用对象的配置以及生命周期,此时 Spring 就相当于一个容器;
  5. 框架集合:能将简单的组件进行配置,组合成为更为复杂的应用;在 Spring 中,应用对象被声明式地组合在一个 XML 文件中;此外,Spring 也提供了事务管理、 持久化框架集成等基础功能,将应用逻辑的开发留给开发者;

2. Spring 核心组件

在这里插入图片描述

Spring 是一个分层架构,主要由如下 7 大模块所构成。Spring 模块位于核心容器,定义了创建、配置和管理 Bean 的方式。

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

3. Spring 常用注解

注解 说明
@Controller 1. 用于标注控制层组件
2. 用于标记一个类,表示它是一个 SpringMVC Controller 对象
3. 分发处理器将扫描使用了该注解的类的方法,同时检测方法是否使用 @RequestMapping
4. 能够将 Request 请求 header 部分的值绑定到方法的参数上
@RestController 相当于 @Component@ResponseBody 的组合
@Component 泛指组件,当组件不好归类时进行注解
@Repository 用于注解 DAO 层,在 DaoImpl 类中注解
@Service 用于注解业务层组件
@ResponseBody 1. 异步请求
2. 用于将 Controller 的方法返回的对象,通过适当的 HttpMessageConverter 转换为指定格式后,写入到 Response 对象的 body 数据区
3. 返回的数据并非 html 的页面,而是其他某种格式的数据(json、xml)时使用
@RequestMapping 用于处理请求地址映射的注解,用于类或方法,用于类时,表示类中所有响应请求的方法都以该地址作为父路径
@Autowired 对类成员变量、方法以及构造函数进行标注,从而完成自动装配,通过 @Autowired 的使用来消除 get、set 方法
@PathVariable 用于将请求 URL 中的模板变量映射到功能处理方法的参数上,即取出 URL 模板中的变量作为参数
@RequestParam 用于在 Spring MVC 后台控制层获取参数,类似 request.getParameter("name")
@RequestHeader Request 请求 header 部分的值绑定到方法的参数上
@ModelAttribute 在该 Controller 所有方法在调用前,先执行该注解,可用于注解和方法参数中
@SessionAttributes 将值放到 session 作用域,写在 Class 上面
@Valid 实体数据校验,结合 Hibernate Validator 一起使用
@CookieValue 获取 cookie 中的值

4. IoC 原理

4.1 定义

Spring 通过一个配置文件来描述 Bean 之间的相互依赖关系,利用 Java 的反射功能来实例化 Bean 并建立 Bean 之间的依赖关系。Spring 的 IoC 容器在完成这些底层工作的基础上,还提供 Bean 实例缓存、生命周期管理、Bean 实例代理、事件发布、资源装载等高级服务;

总结而言:IOC 负责创建对象、管理对象(通过依赖注入)、整合对象、配置对象以及管理对象的生命周期

4.2 Spring 容器高层视图

在这里插入图片描述

  1. Spring 启动时先读取 Bean 配置信息,并在 Spring 容器中生成一份对应的 Bean 配置注册表;
  2. 根据上一步中生成的 Bean 配置注册表来实例化 Bean,并装配好 Bean 之间的依赖关系;
  3. 将实例化后的 Bean 装载到 Spring 容器中的 Bean 缓存池中,供上层的应用程序使用;

4.3 Spring Bean 的作用域及生命周期

4.3.1 作用域

Spring 中,用来组成应用程序的主体以及由 Spring IoC 容器所管理的对象叫做 Bean。简而言之,Bean 就是由 IoC 容器来进行初始化、装配和管理的对象。

Bean 的作用域主要有如下几种:

  1. Singleton(单例)

作用域为 Singleton该模式在多线程下不安全,表明 IoC 容器中只会存在一个共享 Bean 实例,而且所有对 Bean 的请求,主要 id 和该 Bean 定义相匹配,那么就会返回 Bean 的同一实例。Singleton 是单例模型,即在从创建容器的同时就会自动创建一个 Bean 的对象,无论是否使用,而且 每次获取到的对象都是同一对象

  1. Prototype(原型):每次创建时使用

作用域为 Prototype,表明一个 Bean 定义对应多个实例,该作用域中的 Bean 会导致在 每次对该 Bean 请求时均创建一个新的 Bean 实例Prototype 是一个原型类型,在我们创建容器时并未实例化,而是当我们获取 Bean 时才去创建一个对象,而且每次获取到的对象都不一样。

  1. Request:一次 request 一个实例

作用域为

### 常见Spring面试问题及解答 #### 什么是Spring Boot?其主要特点是什么? Spring Boot是Spring开源组织下的子项目,作为Spring组件的一站式解决方案,旨在简化使用Spring的难度。它通过减少繁重的手动配置需求并提供多种启动器使开发者能够更迅速地上手新项目[^1]。 ```java @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 此代码片段展示了如何创建一个简单的Spring Boot应用程序入口点。仅需少量代码即可启动整个应用框架,体现了Spring Boot降低复杂度的设计理念。 #### Spring容器中的Bean是否具备线程安全性? Spring容器本身并未为Bean内置任何特定的线程安全机制;因此,默认情况下这些对象并不保证线程安全。不过,实际线程行为会受到所选作用域的影响——例如单例模式下共享实例可能需要额外同步措施而原型模式每次请求都会生成新的实例从而自然规避了一些并发访问带来的风险[^2]。 #### 自动装配的方式有哪些? 一种常见的自动装配方式是由名称匹配完成注入过程(`byName`)。当某个属性的名字正好对应另一个定义好的bean名字时,则可以实现自动化关联操作而不必显式指定依赖关系[^3]。 ```xml <bean id="exampleService" class="com.example.ExampleServiceImpl"/> <!-- 如果存在名为 exampleService 的property 将会被自动装配 --> <bean name="clientComponent"> <!-- ... --> </bean> ``` 上述XML配置文件片断演示了基于名称(`byName`)的自动装配方法,在这里假设有一个叫做 `exampleService` 的服务类以及客户端组件将会尝试寻找相同命名的服务来进行绑定工作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泡芙萝莉酱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值