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源码中运用到的一些设计模式 Ibatis设计模式简介:主要是讲述Ibatis源码中运用到的一些设计...
Java EE设计模式:Spring企业级开发最佳实践
java反射技术,java设计模式,spring security安全管理手册,说明,使用
为了更系统的学习设计模式,特地开了这样一个基于Java的设计模式【集中营】,都是笔者在实际工作中用到过或者学习过的一些设计模式的一些提炼或者总检。慢慢地初见规模,也有几个朋友给我点鼓励,给了star。本文工程...
Java EE设计模式:Spring企业级开发最佳实践
java Spring 框架 设计模式java Spring 框架 设计模式java Spring 框架 设计模式
作为一个资深Java工程师,我发现《Spring 设计模式总结》PDF非常精彩,它深入剖析了Spring框架中的关键设计模式。例如,简单工厂模式通过BeanFactory展现,实现了松耦合和动态对象创建。工厂方法模式则通过...
23中java设计模式结合生活中用例进行讲解以及spring源码中存在的设计模式才知道原来设计模式如此重要,视频教程链接如下:https://study.163.com/course/courseMain.htm?courseId=1209569921,或者直接在网易云搜索...
一天轻松学会Java设计模式,其中还有许多struts2 spring框架对设计模式的具体应用
spring书上的源代码,都是书上可运行的项目
为了更系统的学习设计模式,特地开了这样一个基于Java的设计模式【集中营】,都是笔者在实际工作中用到过或者学习过的一些设计模式的一些提炼或者总检。慢慢地初见规模,也有几个朋友给我点鼓励,给了star。本文工程...
Java设计模式和源码
下面小编就为大家带来一篇浅谈spring中用到的设计模式及应用场景。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
SpringBoot 应用动态编译 Java 源码并注入 Spring 容器,实现动态修改接口和抽象类的实现。注意,项目以 Jar 包形式启动时要在命令行引入 tools.jar 的包,IDEA下可直接调试。 基于接口、抽象类实现不停机动态调整...
Java EE设计模式 Spring企业级开发最佳实践源代码
java设计模式.pdf
《Spring2.5-中文参考手册》和《JAVA设计模式》,希望对用得着的人有用!
多图详解Spring框架的设计理念与设计模式