Spring 中 IoC 、 DI 、 MVC 的基本原理 IoC(控制反转):使用容器保存 Spring 管理的所有对象,并管理其生命周期。 了解哪些对象需要被 spring 管理。 doScanner 方法:读取配置文件或者注解,找到开发者声明的需要依靠 spring 管理的类,扫描属性(例如 id 、 class 、 init-method 、 scope),记录相应属性,以便 DI 时可以进行注入。 将扫描到的需要交给 Spring 管理的类进行初始化。 doInstance 方法:按照扫描结果,将对象进行…

2020-04-18 0条评论 1566点热度 0人点赞 SilverLining 阅读全文

提出问题 在 V1 版本中,我们已经简单实现了 Mini Spring 最基本的功能,但是代码并不是很优雅,还存在着一些问题。例如: HandlerMapping 还不能像 Spring MVC 一样支持正则 URL 中的参数类型还不支持强制类型转换, 在反射调用前还需要重新获取 BeanName 本文将首先对 MiniSpring 中的 IoC 与 DI 的逻辑进行优化和重构。 从 Servlet 到 AppcationContext 先来回顾一下我们之前写的 IoC 与 DI 部分的流程: 调用 Servlet…

2020-04-02 0条评论 1730点热度 0人点赞 SilverLining 阅读全文

Spring 的运行思路 Spring 的整个启动流程大致可以分为三个阶段: 配置阶段 初始化阶段 运行阶段 梦开始的地方 spring 配置文件 首先,我们准备一个配置文件来模拟 spring-application.xml 中的配置,为了偷懒方便解析,我们就直接写一个 minispring-config.properties 文件: scanPackage=com.minispring.demo Servlet 配置文件 大家都知道,所有依赖于 Web 容器的项目都是从读取 web.xml 文件中的配置开始的,…

2020-03-31 0条评论 1634点热度 0人点赞 SilverLining 阅读全文

Spring 不仅是一个框架,Spring 已然成为一种生态。 Spring 诞生之前 在 Spring 诞生之前,Java 服务端的主要的技术栈还是 Servlet,JSP,EJB,Struts 。 在传统应用程序开发中,一个完整的应用是由一组相互协作的对象组成。所以开发一个应用除了要开发业务逻辑之外,更多的还需要关注如何使这些对象协作来完成所需功能,而且还要尽量满足低耦合、高聚合的设计。 可能有人说了,使用 “抽象工厂” 、 “工厂方法模式” 不也可以帮我们创建对象,使用 “生成器模式” 来处理对象间的依赖关系…

2020-03-29 0条评论 2775点热度 2人点赞 SilverLining 阅读全文

提出问题 我觉得做过 Java Web 项目的程序员,代码数量敲到一定程度的时候,都会产生这样的疑惑:MVC 层中的 Service 层,Dao 层的接口到底有什么用?是否是为了使用接口而使用接口? 不用接口并不代表就不能解耦,就不是 OOP 。 尤其是在事实上,99% 的场景都是接口与实现类严格一一对应的。在这种情况下,接口究竟有什么意义? 是为了使用 JDK 基于接口的动态代理吗?但基于 CGLib 的动态继承也同样可以实现 AOP,并且 Spring 本身也对两种技术都提供了支持,所以技术上的理由也同样是不充…

2020-03-08 0条评论 1659点热度 0人点赞 SilverLining 阅读全文