Java面试—Spring篇

文章目录

    • 1、什么是IOC?
    • 2、什么是AOP?
    • 3、Spring Bean的生命周期是什么?
    • 4、Spring容器启动阶段会干什么?
    • 5、Spring Bean的作用域是什么?
    • 6、循环依赖问题如何解决?

1、什么是IOC?

  1. IOC(Inversion Of Control):控制反转是一种设计思想,对于spring来说就是将在原本程序中手动创建对象的控制权利,交给Spring框架来进行管理。
  2. 控制:指的是对象创建(实例化、管理)的权力
  3. 反转:控制权交给外部环境(Spring框架、IOC容器)

Java面试—Spring篇_第1张图片

2、什么是AOP?

  1. AOP(面向切面编程):简单说,就是把一些业务逻辑中相同的代码抽取到一个独立模块中,让业务更加清爽。
  2. AOP是基于动态代理的,如果是实现了接口的话就会使用JDK动态代理,否则使用CGLIB代理,主要应用于处理一些具有横切性质的系统级服务,如日志收集、事务管理、安全检查、缓存、对象池管理
  3. AOP核心概念:
概念名 作用
目标(Target) 被通知对象
代理(Proxy) 向目标对象应用通知之后创建的代理对象
连接点(JoinPoint) 目标对象的所属类,定义的所有方法均为连接点
切入点(Pointcut) 被切面拦截 / 增强的连接点
通知(Advice) 增强的逻辑 / 代码,也即拦截到目标对象的连接点之后要做的事情
切面(Aspect) 切入点(Pointcut)+通知(Advice)
Weaving(织入) 将通知应用到目标对象,进而生成代理对象的过程动作
  1. 具体的使用可以看我的另外一篇文章为你的项目配置日志(AOP+logback)_wzdhc的博客-CSDN博客

3、Spring Bean的生命周期是什么?

Spring IOC中Bean的生命周期大致分为四个阶段:

  1. 实例化
  2. 属性赋值
  3. 初始化
  4. 销毁

Java面试—Spring篇_第2张图片

这个是更加细致的,我是比较菜的,如果真问到了这个,我也无能为力了

4、Spring容器启动阶段会干什么?

  1. Spring容器启动阶段可以划分为两个阶段:容器启动阶段Bean实例化阶段
  2. 其实容器启动阶段主要做的工作是加载和解析配置文件,保存到对应的Bean定义中。
  3. 详细过程:
    1. 资源定位:定位配置文件
    2. 资源载入:定位到后,会选择合适的解析器加载配置文件,转换为容器内部的的数据结构,比如BeanDefinition
    3. BeanDefinition的注册:将得到的BeanDefinition注册到内部的BeanDefinitionRegistry中
    4. Bean的实例化前置处理:通过BeanPostProcessor和BeanFactoryPostProcessor等进行处理
    5. Bean的实例化:通过构造器注入、工厂方法注入等实例化所有的bean
    6. 依赖注入:当Bean实例化完后,会为Bean注入所需的依赖对象
    7. 初始化前后的处理:在Bean初始化前、后,容器提供了一些可扩展点
    8. Bean的初始化:调用Bean的初始化方法
    9. 容器可用:容器可以被外部所用了
    10. 容器销毁:程序关闭,容器将会调用所有Bean的销毁方法

5、Spring Bean的作用域是什么?

作用域 作用
singleton 在Spring容器中仅存一个Bean实例,Bean以单实例的方式存在,是Bean默认的作用域
prototype 每次从容器中调用Bean时,都会返回一个新的实例
request (只适用于web) 每一次http请求都会产生一个新的bean,该bean仅在当前HTTPRequest内有效
session(只适用于web) 同一个http Session共享一个Bean,不同的Http Session 使用不同的bean

6、循环依赖问题如何解决?

  1. 循环依赖:就是自己依赖自己,或者别的Bean互相依赖
  2. bean初始化的步骤分为:实例化、属性赋值、初始化
  3. 解决:通过三级缓存去解决
    1. 一级缓存:单例池,用户保存实例化、属性赋值、初始化完成的bean实例
    2. 二级缓存:早期曝光对象,用户保存实例化完成的bean实例
    3. 三级缓存:早期曝光对象工厂,用于保存bean创建工厂,以便于后面扩展有机会创建代理对象

Java面试—Spring篇_第3张图片

你可能感兴趣的:(面试,java,spring,面试)