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

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

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

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

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

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

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

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

前言 本文来总结回顾一下之前学习的 26 中设计模式。 在正文开始之前,先抛出一个问题:我们为什么要学习设计模式? GoF 的设计模式是 Java 基础知识和 J2EE 框架知识之间一座隐性的"桥" 设计模式和 J2EE 在思想和动机上是一脉相承的,我总结了以下几个原因: 设计模式更抽象。J2EE 是具体的产品代码,我们在日常工作中就可以接触到,而设计模式在对每个应用时才会产生具体代码; 设计模式是比 J2EE 等框架软件更小的体系结构, J2EE 中许多具体程序都是应用设计模式实现的。当你深入到 J2EE 的内部…

2020-03-25 0条评论 403点热度 0人点赞 阅读全文

设计模式系列文章:https://zhum.in/blog/category/notes/design-pattern Demo code:https://github.com/njZhuMin/BlogSampleCode 中介者模式 中介者模式(Mediator Pattern)又称为调解者模式或调停者模式。中介者模式使用一个中介对象来封装一系列的对象交互过程,使各对象之间不需要显式地直接相互调用,从而松散耦合,而且可以独立地改变它们之间的交互。属于行为型模式。 一个系统中,如果各层次对象之间存在大量的关联关系…

2020-03-22 0条评论 439点热度 0人点赞 阅读全文

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

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

设计模式系列文章:https://zhum.in/blog/category/notes/design-pattern Demo code:https://github.com/njZhuMin/BlogSampleCode 享元模式 面向对象可以很好地解决一些灵活性或可扩展性问题,但在很多情况下需要在系统中增加类和 对象的个数。当对象数量太多时,将导致运行代价过高,带来性能下降等问题。享元模式正是为解决这类问题而诞生的。 享元模式 (Flyweight Pattern) 又称为轻量级模式,是对象池的一种实现。例如…

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

# 门面模式 门面模式(Facade Pattern)又称外观模式,提供了一个统一的高层次接口,用来访问子系统中的一群接口。 应用场景: - 当子系统越来越复杂时,使用门面模式提供统一简单的入口接口。(横向耦合) - 构建多层系统结构,利用门面对象作为每层的入口,简化层间调用。(纵向耦合)

2020-03-07 0条评论 485点热度 0人点赞 阅读全文

代理模式(Proxy Pattern)是指为其他对象提供一种代理,以控制对这个对象的访问,属于结构型模式。 在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

2020-03-04 0条评论 480点热度 0人点赞 阅读全文
12