Spring中的Callback模式与Template模式合用,随处可见。Template method被广泛的使用,像Servlet就是使用这个模式。Template mothod模式虽然能简化很多重复的代码,但这种模式的也有不少限制。Template mothod将一个功能的实现分成许多小的步骤,在父类中定义了这些步骤的顺序,让子类来具体实现每一个小的步骤。这些小的步骤是protected,以防止用户不正确的使用这些小的步骤而产生异常。这样就产生了一个限制,那就是你需要继承Template然后重新实现具体的小步骤。如果这个Template有许多方法,就像JdbcTemplate,如果你每次继承这个庞大的类,然后只是重写某个小步骤中来订制你自己的功能,就会显得非常笨重,更何况数据库操作使用的如此频繁,难道你每进行一个操作就通过继承订制一个,显然不可能这么做。
至所以不完全采用Template的模式是因为Template很庞大,有许多方法,继承它的话划不来:显得笨重。
Spring使用Callback模式与之配合,达到了去掉重复代码的效果,同时增加了很大的灵活性,你只需要实现某些CallBack就可轻松订制出Template。
那么什么时候才是Callback模式与Template模式结合的最佳时机呢?显然如果每个具体的步骤都需要真正去具体实现而不是简单的改变参数或设置某个对象就ok的话,使用Callback很难去订制,因为你可能需要传递多个Callback作为参数,并让用户去实现,是用Java的内部类本来就是一个比较丑陋的语法,更何况参数是多个。这相当于你把每个小步骤封装成为接口,然后分别继承之然后实现。显然没有达到方便灵活的效果,这时候直接使用Template method模式就比结合Callback要好。而如果用户只需要定制一个方法能就达到用户的要求,或者更简单,只是设置不同的参数,那么使用Callback就具有很好的灵活性。
使用Template-Callback模式的时机:用户只需要定制一两个方法就能达到要求或只需要设置不同的参数。
Template-Callback模式在Spring中的实现步骤:
1. 创建一个Template对象: jdbcTemplate = new JdbcTemplate(dataSource);
2. 该Template有个execute方法,里面含有需要你传递进来的参数(参数声明可能是接口,也可能是具体类).该方法已经实现了你需要的达到目的的步骤,以及会返回你所需要的东西。你所要做的就是实现该方法所需要的参数。
3. 创建参数并调用Template方法。你可能需要实现接口来创建Template方法所需要的参数(可能采取内部类的形式)。
该模式如何体现了CallBack????
软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回, 它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。回调和异步调用的关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。同步调用是三者当中最简单的,而回调又常常是异步调用的基础。
回调就是自己定义的函数但由系统来调用
- 大小: 9 KB
分享到:
相关推荐
例如,Spring框架中的`JdbcTemplate`虽然名字中含有“Template”,但它其实主要依赖于回调机制。`JdbcTemplate`执行SQL查询时,会调用用户提供的回调方法来处理结果集,这类似于同步回调,因为结果处理在查询完成后...
Spring 数据库访问的支持。包括统一异常体系和Spring的Template+CallBack的解读
在`JdbcTemplate`的设计中,模板(Template)承担着事物控制、资源管理和异常处理的责任,而回调(Callback)则专注于实现应用程序特有的逻辑,如创建SQL语句、设置参数和处理结果集。这种分离使得开发者能够更专注...
Spring的DAO设计模式主要体现在模板(Template)和回调(Callback)两个概念上。 模板类,如`JdbcTemplate`,负责处理数据访问流程中的通用部分,包括事务管理、资源的打开和关闭,以及异常的处理。这些模板类通常...
- **JMS Template(模板类)**:`JmsTemplate`是Spring JMS提供的核心组件之一,它简化了JMS消息的发送和接收过程。该模板类负责创建和管理JMS会话、连接及事务,并提供了多个方法用于发送消息或接收消息。 - **`...
Spring Data Redis通过提供高级抽象和自动化配置,使得在Java应用中使用Redis变得简单。无论是连接池的配置,还是基于Lua的事务处理,都能显著提升开发效率和系统性能。在实际项目中,结合具体业务需求,灵活运用...
spring大量使用Template Method模式来封装固定流程的动作,XXXTemplate等类别都是基于这种方式的实现。 除了大量使用Template Method来封装一些底层的操作细节,spring也大量使用callback方式类回调相关类别的方法...
#### Template and Callback 模板和回调机制提供了额外的灵活性,允许开发者定义自己的数据处理逻辑,比如自定义索引创建流程或查询优化策略。 ### 配置 #### Programmatic Configuration 通过编程方式配置Compass...
SnypirCallbackPrototype Snypir.com的Android应用未完成的原型 如果您将AndroidAnnotations与Spring Rest Template一起使用,这就是您的应用程序的外观。
本项目为WxJava的Demo演示程序,基于Spring Boot ,实现企业微信替代开发功能。 更多信息请查阅: : 使用步骤: 请注意,本演示为简化代码编译时加入了lombok支持,如果不了解lombok的话,请先学习下相关知识,可以...
spring.security.oauth2.client.registration.github.redirect-uri-template={baseUrl}/login/oauth2/code/{registrationId} ``` `{baseUrl}` 应该替换为你的应用URL,`{registrationId}` 是配置的ID,这里为 ...
- 示例:在函数 `add(int a, int b)` 中,`a` 和 `b` 是参数,而调用时实际传递的值是实参。 5. **Array (阵列/数组)** - 定义:一种数据结构,用于存储相同类型的多个元素。 - 示例:`int[] numbers = {1, 2, ...