Skip to content
1.介绍一下Spring的IOC
  • IOC即控制反转,它可以解耦对象之间的依赖关系;
  • 比如B类使用A类,原来控制权在B,B只要new一个A即可使用;
  • 现在控制权在A本身,只有当A注入容器B才能获取到。
2.介绍一下Spring的AOP

AOP即面向切面编程,将公共逻辑抽离出来,配合注解可以实现日志记录、权限控制;

3.为什么Spring不建议使用基于字段的依赖注入?
  • IDEA使用@Autowired会弹出警告,推荐使用构造器方式注入;
  • 当业务代码越来越复杂,导致注入的对象越来越多,类逐渐开始违反单一职责原则,使用构造器相当于变相体型你引入的类太多了,已经违反单一职责原则,建议重构。
  • 如果在类的构造方法使用注入的对象,可能bean尚未初始化,使用构造器可以减少这个问题
4.Spring Bean的初始化过程是怎么样的?
  1. 设置属性值:
5.Spring支持哪些注入方式?
  1. 注解@Autowired@Resource
  2. 构造器
  3. setting
6.谈谈你对循环依赖的理解
  • 概念:一般是A和B互相依赖,或A->B->C三个互相注入,如果是使用构造器注入方式,没法解决这个问题,会在程序启动时检测,如果有循环依赖直接抛出异常,
  • 解决:只能通过Set设置值的方式注入,相当于延缓在其中一个构造器中加入@Lazy,延迟初始,或拆分服务
7.聊聊Spring中的作用域
  • 使用@Scope可以设置bean的作用域,
  • singleton:单例模式,一个bean只有一个实例。
  • prototype:原型模式,每次获取bean时,都会重新创建一个实例。
  • request:请求域,每次请求都会创建一个bean实例。
  • session:会话域,每个会话都会创建一个bean实例。
  • global:全局域,每个线程都会创建一个bean实例。
  • application:应用域,每个应用都会创建一个bean实例。
  • websocket:在每个 WebSocket 会话中创建一个 Bean 实例