Spring

Spring IoC

什么是 Spring IOC 容器?

通过由代理人创建和管理对象,消费者通过代理人来获取对象。具体来说,是将对象加入到IoC容器中,由IoC容器将对象进行统一管理,而不是在程序中一个个 new 对象。如果需要修改某一个类,就直接修改一次就可以了。用的时候直接去容器里面取。修改和使用互不影响,其目的是降低对象直接的直接耦合。

什么是依赖(Dependency Injection)注入?

依赖注入是指运行时将Spring IoC容器内的对象利用反射赋值给其他对象的操作。也就是一个对象依赖于另外一个对象。

依赖注入有几种方式?

三种:

  • 构造方法注入

  • setter 注入

  • 接口注入

Spring IoC 中的 bean scope (作用域)有哪些?

  • singleton : 单例(默认),每个容器内有且jinyou 唯一的实例, 被全局共享

  • prototype : 多例,每次使用都创建一个实例

  • request : web 环境下,每一次独立请求存在唯一实例

  • session : web 环境下,每一个session存在唯一实例

  • application: web环境下, ServletContext 存在唯一实例

  • webscoket: 每一次 websocket 连接中存在唯一实例

bean的生命周期

bean 的生命周期和 容器行为 可以用下图进行表示:

Spring 提供了哪些配置方式

常用两种

  • 基于 xml 配置,通过各种标签

  • 基于注解配置,比如@GetMapping 和 @Postmapping

Spring 中Bean实例化有几种方式

  • 使用类的构造方法,直接在bean标签下面的 constructor-arg 传入构造方法参数

  • 使用静态工厂实例化,定义一个静态工厂类,里面有一个静态方法,直接 return 一个对象

  • 使用工厂方法实例化,定义一个工厂类,需要实例化这个工厂,再通过工厂类的方法return一个对象

将一个类声明成Spring 的bean的注解有哪些?

@Component 组件注解,通用注解

@Controller 控制器类

@Service 说明当前类是Service 业务服务类

@Repository 说明当前类是 DAO 类, 对数据增删改查

Spring AOP

Spring AOP 有几种通知类型

5种:

  1. before 前置通知, 在目标方法运行前, 先去执行 切面类 的 切面方法

  2. after 后置通知,在目标方法运行后,再执行切面类的切面方法

  3. after return 后置返回通知,在目标方法返回数据以后,再执行切面类的切面方法

  4. after throwing 异常通知, 在目标方法抛出异常后, 再执行切面类的切面方法

  5. around 环绕通知,最为强大,可自定义通知执行时机,可决定目标方法是否运行

说一下 JointPoint 类

Spring AOP使用过程中的核心类,可以看作是程序运行时的一个切点,通过这个切点可以获取目标方法的信息。JointPoint 拥有下面几个核心方法:

  • getTarget()获取目标类

  • getSignature() 获取目标方法

  • getArg()获取目标方法

说一下 ProceedingJointPoint 类

ProceedingJointPoint 类 是 JointPoint 类的升级版,除原有功能以外,还可以控制目标方法是否被执行。

Spring MVC

说一说Spring 工作原理

Spring MVC 常用注解

  • Controller, 将当前类标注成为一个控制器

  • ResponseBody, 不跳转页面,直接输出响应

  • RestController, 可以理解为Controller+ResponseBody, 更加适合前后端分离的架构

  • RequestMapping, 可以注解在类和方法上,用于指定接收get, post, put, delete 方法址

  • GeMapping, 接收 get请求

  • PostMapping, 接收 post 请求

  • RequestParam, 接收前端传来的参数

  • PathVariable 从请求的URL中获取

说明一下Spring MVC 拦截器

拦截器 Interceptor 用于对 URL 进行过滤。其底层就是基于 Spring AOP 面向切面编程实现。让一个 类 实现 HandlerInterceptor 接口即可实现一个拦截器。 HandlerInterceptor 定义了三种方法:

  • preHandle, 前置拦截,只有return True 才会被送到下一步继续处理,否则直接会被拦截

  • postHandle, 后置拦截, 目标资源已被Spring MVC 框架处理, return以后, 产生响应文本之前

  • afterCompletion, 响应文本产生以后,比如生成json, html 以后

Spring MVC 拦截器的使用步骤

在applicationContext 文件里面用 mvc:interceptors标签,在其下使用 mapping 标签对 URL进行拦截,bean 标签指定具体的拦截器

Spring 通用问题

介绍一下 Spring 的声明式事务

声明式事务是指利用 AOP 自动提交,回滚数据库事务

声明式事务规则:进入方法之前打开事务,成功提交,运行时异常RuntimeException 则回滚。

通过在方法上添加 @Transactional 注解

说一说 Spring, SpringMVC, SpringBoot 的区别

Spring 是所有应用的基础,提供了 IOC 和 AOP 的特性

SpringMVC 是 Spring的子项目,用于提供Web 支持

SpringBoot 是 SpringMVC 的简化版, 提高了开发效率

Last updated