86 | 开源实战四(下):总结Spring框架用到的11种设计模式
王争
该思维导图由 AI 生成,仅供参考
上一节课,我们讲解了 Spring 中支持扩展功能的两种设计模式:观察者模式和模板模式。这两种模式能够帮助我们创建扩展点,让框架的使用者在不修改源码的情况下,基于扩展点定制化框架功能。
实际上,Spring 框架中用到的设计模式非常多,不下十几种。我们今天就总结罗列一下它们。限于篇幅,我不可能对每种设计模式都进行非常详细的讲解。有些前面已经讲过的或者比较简单的,我就点到为止。如果有什么不是很懂的地方,你可以通过阅读源码,查阅之前的理论讲解,自己去搞定它。如果一直跟着我的课程学习,相信你现在已经具备这样的学习能力。
话不多说,让我们正式开始今天的学习吧!
适配器模式在 Spring 中的应用
在 Spring MVC 中,定义一个 Controller 最常用的方式是,通过 @Controller 注解来标记某个类是 Controller 类,通过 @RequesMapping 注解来标记函数对应的 URL。不过,定义一个 Controller 远不止这一种方法。我们还可以通过让类实现 Controller 接口或者 Servlet 接口,来定义一个 Controller。针对这三种定义方式,我写了三段示例代码,如下所示:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Spring框架广泛应用多种设计模式,包括适配器、策略、装饰器和工厂模式。适配器模式统一不同方式定义的Controller类中的函数,避免繁琐的逻辑,实现了开闭原则。策略模式体现在Spring AOP中,通过动态代理实现的选择,使得Spring在运行时动态地选择不同的动态代理实现方式。装饰器模式用于增加对事务的支持和对Cache的数据处理。工厂模式经典应用是实现IOC容器,通过工厂方法创建Bean。此外,Spring还用到了观察者、模板、职责链和代理模式。这些设计模式的应用使得Spring框架更加灵活、可扩展,为开发者提供更好的使用体验。文章还提到了Builder模式在Spring中创建Bean的应用,展示了设计模式在实际项目开发中的重要性和应用价值。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《设计模式之美》,新⼈⾸单¥98
《设计模式之美》,新⼈⾸单¥98
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(21)
- 最新
- 精选
- 黄平TransactionAwareCacheDecorator怎么用呢?
作者回复: 😂 自己查查吧
2020-06-11 - 小晏子可以使用FactoryBean接口来实现,如下: //StdHttpClient可以理解为已经定义好的一个类,使用builder模式实现。 public class HttpFactoryBean implements FactoryBean<HttpClient>{ private String host; private int port; public HttpClient getObject() throws Exception { return new StdHttpClient.Builder() .host(host) .port(port) .build(); } public Class<? extends HttpClient> getObjectType() { return StdHttpClient.class; } public boolean isSingleton() { return true; } public void setHost(String host) { this.host = host; } public void setPort(int port) { this.port = port; }} 添加配置到bean定义: <beans ...> <bean name="myHttpClient" class="HttpFactoryBean"> <property name="port" value="8080"/> <property name="host" value="localhost"/> </bean> </beans> 之后你就可以使用StdHttpClient实例了。2020-05-20122
- 岁月不是做java的看的好累....看源码必须是先知道怎么使用, 然后才看源码, 这样才比较好看懂源码.2020-05-20118
- 饭越看到后面,越觉得最好的模式就是没有模式,用好并理解基本的面向对象设计就成功一半了。2020-05-20215
- Jie这篇内容密度很大,可以看上两天。 另外策略模式那块提到“这两种动态代理实现方式的更多区别请自行百度研究吧”,不是应该用Google搜索么=w=?2020-05-2035
- 悟光尝试了一下,xml配置未找到直接调用build方法的配置,用构造器注入 类: public class Student { private long id; private String name; private Student(Builder builder) { this.id =builder.id; this.name = builder.name; } public String getName() { return name; } public static class Builder { private long id; private String name; public Student build() { if (StringUtils.isEmpty(name)){ throw new IllegalArgumentException("name is empty"); } return new Student(this); } public void setId(long id) { this.id = id; } public void setName(String name) { this.name = name; } } } 配置: <bean id="build" class="cn.gitv.rt.advertisv5.utils.Student.Builder" > <property name="name" value="aa"/> <property name="id" value="2"/> </bean> <bean id="student" class="cn.gitv.rt.advertisv5.utils.Student"> <constructor-arg ref="build"/> </bean> 2、“实际上,我们可以利用是适配器模式对代码进行改造,让其满足开闭原则,能更好地支持扩赞”。 这一句应该 “赞” 敲串行了。2020-05-2014
- 第一装甲集群司令克莱斯特一看就会,一写就废!2022-11-11归属地:北京2
- 电光火石// 通过参考工厂方法来创建BeanId="zheng""的Bean <bean id="zheng" class="com.xzg.cd.StudentBuilder" build-method="build"> <property name="id" value="1"></property> <property name="name" value="wangzheng"></property> </bean> 把factory-method改成build-method2020-05-2012
- Heaven对象的初始化有两种实现方式。一种是在类中自定义一个初始化函数,并且通过配置文件,显式地告知 Spring,哪个函数是初始化函数2020-05-202
- 牛凡在Spring中没有找到AnnotationMethodHandlerAdapter,应该是RequestMappingHandlerAdapter吧2021-12-141
收起评论