Spring是个优秀的开源框架,主要应用于业务的处理,它和持久化框架以及展现层框架有着很大的不同。因此,Spring框架中用到了很多优秀的设计模式。通过对spring源代码的分析,讲解spring源码中应用到的设计模式,以及这些设计模式所带来的好处。
首先是spring在web应用下的启动。spring有个listener名为ContextLoaderListener,这个listener里边有个ContextLoader,ContextLoader有个初始化方法initWebApplicationContext。而在这个方法中,同时也调用了好几个方法。第一个方法是通过读取传过来的参数创建一个父类的applicationContext,第二个方法是根据对传过来的参数配置文件进行解析,创建webApplicationContext。然后将这个对象放入线程中。很明显,这种设计模式是Facade模式,这两种方法同时分别还调用了其他方法。这两种方法中的其他方法也是有序,不能互换顺序。由于Spring必须有顺序的加载才能保证Spring正常的启动运行,因此有很多地方都用到了Facade模式。
Facade(外观)模式为子系统中的各类(或结构与方法)提供一个简明一致的界面,隐藏子系统的复杂性,使子系统更加容易使用。他是为子系统中的一组接口所提供的一个一致的界面。这句话说得特别的拗口,其实就是把那些该调用的方法在一个类的方法中按一定的顺序统一执行,最后再由其他对象来调用这个类的方法。说白了就是把统一顺序执行的方法交给第三方的容器或对象,再由对象来调用这个容器或对象。
Factory模式和Abstract Factory模式以及Strategy模式和Template Method模式,是spring框架中必不可少的设计模式。下面来介绍Template Method模式在spring源码中的应用。在ContextLoader中的createWebApplicationContext方法中创建一个XmlWebApplicationContext对象,这个对象调用refresh()方法。而这个方法位于XmlWebApplicationContext的父抽象类AbstractApplicationContext中,在这个抽象类中有抽象方法和非抽象方法。有个抽象方法refreshBeanFactory(),而这个抽象方法的实现方法却是位于AbstractRefreshableApplicationContext。通过这个方法的实现创建了BeanFactory的实现类。很显然,这种设计模式采用的是TemplateMethod模式。TemplateMethod模式是定义一个抽象类或者说接口,在它的内部定义一些抽象的方法和一些非抽象方法,封装了这些抽象方法的接口或抽象类就是骨架。而将它的实现
延迟到子类中,也就是用子类实现它。不改变算法的结构而重新定义它的步骤,也就是改写或者实现父类的这
些非抽象方法。在上述的实现步骤中,AbstractApplicationContext为骨架,AbstractRefreshableApplicationContext为子类来实现抽象方法,最后才由孙子类XmlWebApplicationContext来调用实现。在Spring中的很多地方都采用这种TemplateMethod设计模式。
分享到:
相关推荐
浅谈Spring中用到的设计模式及应用场景 Spring 框架是 Java 企业级应用程序的核心组件之一,它提供了强大的功能和灵活的架构来简化企业级应用程序的开发。Spring 框架使用了多种设计模式来实现其功能,本文将对 ...
浅谈Java中Spring Boot的优势 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的...
在IT行业中,Java作为一门历史悠久且广泛应用的编程语言,一直以来都是学习者们的首选之一。本文基于给定的文件信息,详细阐述Java自学过程中的一些关键知识点及学习策略,旨在帮助那些希望通过自学Java来提升技能或...
### 浅谈Java代理机制 #### 一、引言 在深入探讨Java代理机制之前,我们首先需要了解代理模式的基本概念及其应用场景。代理模式是一种结构型设计模式,它为其他对象提供了一种代理以控制对这个对象的访问。在Java...
单例模式是一种创建型设计模式,它的主要特点是确保在整个应用程序中,只有一个实例存在。这种模式通常用于实现全局访问点、日志记录、线程池、缓存、数据库连接池等。 在Java中,单例模式可以通过多种方式实现,如...
### Java之浅谈深说——教你如何成长为Java编程高手 在IT行业中,Java作为一种广泛使用的编程语言,其重要性不言而喻。对于希望成为Java编程高手的学习者来说,掌握正确的学习路径至关重要。本文将根据提供的标题、...
2. 实践项目:理论与实践相结合,设置实际的编程项目,如开发简单的桌面应用或Web应用,让学生在实践中巩固所学知识。 3. 进阶内容:随着学生技能提升,可加入高级主题,如JVM原理、Spring框架、数据库操作等,满足...
Spring Boot 是一种基于Java的框架,旨在简化Spring应用程序的初始设置和开发过程。它通过提供预配置的starter项目,使得开发者能够快速启动Web容器和其他关键服务,如数据访问、安全等。Spring Boot的核心优势在于...
SSH框架,全称为Struts+Spring+Hibernate,是Java企业级开发中常用的一种技术栈,主要用于构建基于MVC(Model-View-Controller)设计模式的Web应用。在本篇文章中,我们将深入探讨这三个组件的核心概念和进阶用法,...
Struts 是一款开源的Web应用程序框架,最初在2002年由Apache Jakarta项目发布,旨在简化基于MVC(Model-View-Controller)设计模式的Web应用开发。Struts 1.1是当时最新的稳定版本。Struts提供了一种组织应用程序...
- 在Java企业级应用开发中,Spring MVC是一个典型的应用实例。 - PHP框架如Zend Framework (ZF) 也采用了MVC模式。 - .NET框架中的ASP.NET MVC则是.NET开发者的常用选择。 - Android平台上的应用程序通常也被认为...
单例设计模式是软件设计模式中的一种,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。在Java中,单例模式的应用广泛,尤其是在处理系统级服务、配置信息、线程池等需要全局共享的对象时。下面我们将...
在实际开发中,JSP常常与Model-View-Controller(MVC)设计模式结合,通过框架如Spring MVC或Struts实现更复杂的业务逻辑。这有利于提高代码的可维护性和可扩展性。另外,随着前后端分离的趋势,现代Web应用更多地...
4. **依赖注入和`@Autowired`**:在Spring中,通常推荐通过依赖注入来获取服务层对象,而不是直接在Controller中创建这些对象。这是因为Spring会管理这些依赖的生命周期,保证在并发环境下的正确使用。如果服务层...
总结起来,Spring与SpringMVC的父子容器关系是Java Web开发中的一种设计模式,它允许开发者将应用程序的不同部分分开管理,提高代码的可维护性和复用性。理解这一关系以及初始化过程对于深入掌握Spring框架和Spring ...
浅谈使用java实现阿里云消息队列简单封装 本文主要介绍了使用Java实现阿里云消息队列的简单封装,包括对阿里云消息队列的介绍、设计方案、消息发送和接收的实现等。 一、阿里云消息队列简介 阿里云提供了两种消息...
Java泛型是Java编程语言中的一个强大特性,它允许在代码中使用类型参数,从而提高了代码的重用性和安全性。在处理集合时,泛型能够确保集合中的元素都是同一种类型,避免了运行时的类型转换。在某些情况下,泛型还...
Struts2是一个流行的Java Web开发框架,它基于MVC(模型-视图-控制器)设计模式,极大地简化了Web应用程序的构建。然而,Struts2的安全性是开发者必须关注的重要议题,因为它涉及到用户数据的接收、处理和展示,而这...
在源码层面,开发者通常会使用各种编程语言提供的缓存库或框架,如Java中的Guava Cache、Spring Cache,Python中的Redis或Memcached客户端等。这些工具帮助开发者轻松地集成缓存功能,并提供了丰富的API来管理缓存...