[toc]

谈谈对 IOC、DI 的理解

IOC

在传统的 Java SE 程序设计中,我们直接在对象内部通过 new 的方式来创建对象,是程序主动创建依赖对象;而在 Spring 程序设计中,IOC 是有专门的容器去控制对象。 所谓控制就是对象的创建、初始化、销毁。

  • 创建对象:原来是 new 一个,现在是由 Spring 容器创建。
  • 初始化对象:原来是对象自己通过构造器或者 setter 方法给依赖的对象赋值,现在是由 Spring 容器自动注入。
  • 销毁对象:原来是直接给对象赋值 null 或做一些销毁操作,现在是 Spring 容器管理生命周期负责销毁对象。

总结:IOC 解决了繁琐的对象生命周期的操作,解耦了我们的代码。 所谓反转: 其实是反转的控制权,前面提到是由 Spring 来控制对象的生命周期,那么对象的控制就完全脱离了我们的控制,控制权交给了 Spring 。这个反转是指:我们由对象的控制者变成了 IOC 的被动控制者。

DI

依赖注入是一种实现,而 IOC 是一种设计思想。从 IOC 到 DI ,就是从理论到实践。程序把依赖交给容器,容器帮你管理依赖,这就是依赖注入的核心。 好处: 依赖注入降低了开发的成本,提高了代码复用率、软件的灵活性。 谁依赖谁,为什么需要依赖;谁注入谁,注入了什么:

  • 谁依赖谁:A对象 依赖于 IOC 容器。
  • 为什么需要依赖:A对象需要 IOC 容器提供对象需要的数据、B对象 等外部资源,没有这些资源不能完成业务处理。
  • 谁注入谁:IOC 容器注入 A对象。
  • 注入了什么:IOC 容器将 A对象 需要的数据、B对象等外部资源按需注入给对象。

IOC 的原理

Spring Cloud 有哪些组件

Spring Cloud Alibaba 服务注册与发现、服务配置:nacos 熔断:sentinel 服务调用:Dubbo RPC 服务路由:Dubbo PORXY 分布式消息:RocketMQ

SpringBoot 和 Spring 的区别

AOP 是什么

面向切面编程

Spring bean 的作用域

Singleton, prototype, request, session

Spring 用了哪些设计模式知道多少说多少

@Resources、@Autowired

SpringMVC 的处理流程

介绍一下 rpc

Spring 怎么解决循环依赖问题

Spring bean 的生命周期

  1. 实例化:为 Bean 分配内存空间。

  2. 设置属性:将当前类依赖的 Bean 属性,进行注入和装配。

  3. 初始化:

    1. 执行各种通知。

    2. 执行初始化的前置方法。

    3. 执行初始化方法。

    4. 执行初始化的后置方法。

  4. 使用 Bean:在程序中使用 Bean 对象。

  5. 销毁 Bean:将 Bean 对象进行销毁操作。

mybatis 一对多、多对一

Spring 常用注解

@Controller, @Service, @Repository @RequestMapping, @GetMapping, @PostMapping, … @PathVariable, @RequestBody, @RequestParam @ResponseBody, @RestController

@Transactional 哪些情况会失效