`
asiaafrica120
  • 浏览: 5373 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

浅谈java设计模式在Spring中的应用(二)

阅读更多

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设计模式。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics