一、IOC原理

1.IOC ( Inversion of Control ) :控制反转
需要先了解依赖注入( Dependency Inversion )
含义:把底层类作为参数传递给上层类,实现上层对下层的“控制”

2.依赖注入的方式
Setter
Interface
Constructor
Annotation

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

4.Spring IOC支持的功能
➢依赖注入
➢依赖检查
➢自动装配
➢支持集合
➢指定初始化方法和销毁方法
➢支持回调方法

5.BeanFactory : Spring框架最核心的接口
提供IOC的配置机制
包含Bean的各种定义,便于实例化Bean
建立Bean之间的依赖关系
Bean生命周期的控制

6.getBean方法的代码逻辑
➢转换beanName
➢从缓存中加载实例
➢实例化Bean
➢检测parentBeanFactory
➢初始化依赖的Bean
➢创建Bean

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

8.Spring Bean的生命周期

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

二、AOP

1.关注点分离:不同的问题交给不同的部分去解决
➢面向切面编程AOP正是此种技术的体现
➢通用化功能代码的实现,对应的就是所谓的切面( Aspect )
➢业务功能代码和切面代码分开后,架构将变得高内聚低耦合
➢确保功能的完整性:切面最终需要被合并到业务中( Weave )

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

3.AOP的主要名词概念
➢Aspect :通用功能的代码实现
➢Target :被织入Aspect的对象
➢Join Point :可以作为切入点的机会,所有方法都可以作为切入点
➢Pointcut : Aspect实际被应用在的Join Point ,支持正则
➢Advice :类里的方法以及这个方法如何织入到目标方法的方式
➢Weaving : Aop的实现过程

4.Advice的种类
➢前置通知( Before)
➢后置通知( AfterReturning )
➢异常通知( AfterThrowing )
➢最终通知( After )
➢环绕通知( Around )

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

6.Spring事务的相关考点
➢ACID
➢隔离级别
➢事务传播

Spring也是面试中几乎必考的内容,建议多花时间研究学习,同时阅读源码对理解Spring的相关内容也有很好的帮助,网上有大量相关源码解析的书籍和视频,建议多比对挑选后学习,另外很多面试官也喜欢问从浏览器调用到Spring处理返回视图的整个过程,建议查找相关答案并记忆。