Spring 常见问题汇总

2020-04-18 1335点热度 0人点赞 0条评论

Spring 中 IoC 、 DI 、 MVC 的基本原理

  1. IoC(控制反转):使用容器保存 Spring 管理的所有对象,并管理其生命周期。
    • 了解哪些对象需要被 spring 管理。 doScanner 方法:读取配置文件或者注解,找到开发者声明的需要依靠 spring 管理的类,扫描属性(例如 id 、 class 、 init-method 、 scope),记录相应属性,以便 DI 时可以进行注入。
    • 将扫描到的需要交给 Spring 管理的类进行初始化。 doInstance 方法:按照扫描结果,将对象进行初始化。优先使用之前扫描到的声明的 beanName,若没有则使用类名首字母小写作为 IoC 容器中的 key,保存对象实例到 IoC 容器中。
  • DI(依赖注入):使用 Spring IoC 容器中的对象,需要在注解或者配置中声明,当对象之间有依赖关系时,可以利用 Spring 保存的对象关系。
    • 读取配置文件或者注解(Autowired),判断出需要哪些对象需要注入。
    • 注入过程:如果用户有声明 beanName,则直接从 IoC 容器中取出相应的对象进行注入;若没有,根据类型进行注入。(此处一个接口只能有一个实现类,若有多个实现类且未指定 beanName,或在 Spring 中指定条件,则在 IoC 阶段会抛出异常)。
  • MVC,控制器接受用户的输入并调用模型和视图去完成用户的需求。 Spring MVC 核心的功能是映射 url 和 Method 的对应关系,实现传入 url 寻找到对应的处理方法,执行方法并返回相应的 ModelAndView(可能是 View 交由模板渲染,也可能直接是 Model 数据)。
    • 找到需要在 handlerMapping 中记录的类与方法。扫描注解或者配置文件,读取类以及方法的 RequestMapping 中的值。
    • 将 url 和 Method 的对应关系存储到 handlerMapping 中。将类上的 RequestMapping 的值与方法上的 RequestMapping 的 url 拼接,将全路径的 url 作 Key,method 作值,存储到 handlerMapping 中。
    • 基于 Servelet 的实现,在 doPost() 中执行 doDispatch() 方法,通过 url 从 handlerMapping 中找到指定的方法,使用反射进行调用。

SilverLining

也可能是只程序猿

文章评论