剑指Java面试 -- Spring基础

文章详细介绍了Spring框架的核心组成部分,包括IOC(控制反转)的概念和实现,依赖注入的原理和方式,以及BeanFactory和ApplicationContext的区别。此外,还探讨了AOP(面向切面编程)的应用,如关注点分离、织入方式和Advice类型。同时,文章提到了SpringBean的作用域和生命周期,以及Spring的事务管理相关考点。
摘要由CSDN通过智能技术生成

仅作为面试知识点记录,具体课程请在慕课网搜索剑指Java面试-Offer直通车

Spring

你了解Spring IOC吗

IOC(Inversion of Control):控制反转

  • Spring Core最核心的部分
  • 需要先了解依赖注入(Dependency Injection)
DI举例:设计行李箱

在这里插入图片描述

上层建筑依赖下层建筑

在这里插入图片描述

如果在上层建筑修改参数则需要修改所有下层建筑

在这里插入图片描述

依赖注入

含义:把底层类作为参数传递给上层类,实现上层对下层的"控制"

在这里插入图片描述

在这里插入图片描述

将依赖注入可以实现上下层控制反转,以便定制参数

在这里插入图片描述

依赖注入的方式
  • Setter
  • Interface
  • Constuctor
  • Annotation

依赖倒置原则、IOC、DI、IOC容器的关系

在这里插入图片描述

IOC容器的优势
  • 避免在各处使用new来创建类,并且可以做到统一维护
  • 创建实例的时候不需要了解其中的细节

在这里插入图片描述

Spring IOC容器

在这里插入图片描述

Spring IOC支持的功能
  • 依赖注入
  • 依赖检查
  • 自动装配
  • 支持集合
  • 指定初始化方法和销毁方法
  • 支持回调方法
Spring IOC容器的核心接口
  • BeanFactory
  • ApplicationContext
BeanDefinition
  • 主要用来描述Bean的定义

在这里插入图片描述

BeanDefinitionRegistry
  • 提供向IOC容器注册BeanDefinition对象的方法
BeanFactory:Spring框架最核心的接口
  • 提供IOC的配置机制
  • 包含Bean的各种定义,便于实例化Bean
  • 建立Bean之间的依赖关系
  • Bean生命周期的控制

在这里插入图片描述

BeanFactory与ApplicationContext的比较
  • BeanFactory是Spring框架的基础设施,面向Spring
  • ApplicationContext面向使用Spring框架的开发者

ApplicationContext的功能(继承多个接口)

  • BeanFactory:能够管理、装配Bean
  • ResourcePatternResolver:能够加载资源文件
  • MessageSource:能够实现国际化等功能
  • ApplicationEventPublisher:能够注册监听器,实现监听机制

getBean方法的代码逻辑

  • 转换beanName
  • 从缓存中加载实例
  • 实例化Bean
  • 检测parentBeanFactory
  • 初始化依赖的Bean
  • 创建Bean

面试题

Spring Bean的作用域

  • singleton:Spring的默认作用域,容器里拥有唯一的Bean实例
  • prototype:针对每个getBean请求,容器都会创建一个Bean实例
  • request:会为每个Http请求创建一个Bean实例
  • session:会为每个session创建一个Bean实例
  • globalSession:会为每个全局Http Session创建一个Bean实例,该作用域仅对Portlet有效

Spring Bean的生命周期

创建过程

在这里插入图片描述

销毁过程
  • 若实现了DisposableBean接口,则会调用destroy方法
  • 若配置了destory-method属性,则会调用其配置的销毁方法

你了解Spring AOP吗

关注点分离:不同的问题交给不同的部分解决

  • 面向切面编程AOP正是此种技术的体现
  • 通用化功能代码的实现,对应的就是所谓的切面(Aspect)
  • 业务功能代码和切面代码分开后,架构将变得高内聚低耦合
  • 确保功能的完整性:切面最终需要被合并到业务中(Weave)

AOP的三种织入方式

  • 编译时织入:需要特殊的Java编译器,如AspectJ
  • 类加载时织入:需要特殊的Java编译器,如AspectJ和AspectWerkz
  • 运行时织入:Spring采用的方式,通过动态代理的方式,实现简单

AOP的主要名词概念

  • Aspect:通用功能的代码实现
  • Target:被织入Aspect的对象
  • Join Point:可以作为切入点的机会,所有方法都可以作为切入点
  • Pointcut:Aspect实际被应用在的Join Point,支持正则
  • Advice:类里的方法以及这个方法如何织入到目标方法的方式
  • Weaving:AOP的实现过程
Advice的种类
  • 前置通知(Before)
  • 后置通知(AfterReturning)
  • 异常通知(AfterThrowing)
  • 最终通知(After)
  • 环绕通知(Around)

AOP的实现:JDKProxy和Cglib

  • 由AopProxyFactory根据AdvisedSupport对象的配置来决定
  • 默认策略:如果目标类时接口,则用JDKProxy来实现,否则用后者
  • JDKProxy的核心:InvocationHandler接口和Proxy类
  • Cglib:以继承的方式动态生成目标类的代理
  • JDKProxy:通过Java内部的反射机制实现
  • Cglib:借助ASM实现
  • 反射机制在生成类的过程中比较高效
  • ASM在生成类之后的执行过程中比较高效

Spring里的代理模式的实现

  • 真实实现类的逻辑包含在了getBean方法里
  • getBean方法返回的实际上是Proxy的实例
  • Proxy实例是Spring采用的JDK Proxy或Cglib动态生成的

Spring事务的相关考点

  • ACID
  • 隔离级别
  • 事务传播
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值