用什么技术做网站建设网站代理
用什么技术做网站,建设网站代理,aspcms 生成网站地图,织梦html5手机网站模板一、什么是模版回调你肯定见到过类似这样的 代码TransactionUtil.doInTransactionWithRequires(() - {});而doInTransactionWithRequires 这个方法接收一个函数式方法 supplier 然后内部去调用这个方法doInTransactionWithRequires#xff08;SupplerT supplier而doInTransactionWithRequires 这个方法接收一个函数式方法 supplier 然后内部去调用这个方法doInTransactionWithRequiresSupplerT supplier { T result supplier.get() }这个就是模版回调模板负责“流程骨架” 回调负责“变化点注入”。二、先看“纯模板方法”的问题传统的模板方法模式长这样public abstract class AbstractTask { public final void execute() { before(); doExecute(); after(); } protected void before() {} protected abstract void doExecute(); protected void after() {} }子类继承public class OrderTask extends AbstractTask { Override protected void doExecute() { } }这个方案的问题在工程里很明显强依赖继承子类越来越多一个类只能继承一个父类行为组合非常困难所以在大型框架里纯继承模板几乎不用了。三、模板 回调把“变化”从继承变成参数核心思想不再靠子类重写方法 而是把“变化的逻辑”作为参数传进去这个“参数”就是 回调Callback。四、源码案例Spring 的TransactionTemplate再看 Spring 提供的 TransactionTemplatetransactionTemplate.execute(status - { userDao.update(user); orderDao.create(order); return result; });对应源码里的核心逻辑:TransactionStatus status transactionManager.getTransaction(definition); try { T result action.doInTransaction(status); transactionManager.commit(status); return result; } catch (Exception ex) { transactionManager.rollback(status); throw ex; }五、源码案例 JdbcTemplateSpring JDBC 里最经典的 JdbcTemplatejdbcTemplate.query( select * from user, (rs, rowNum) - new User(rs.getLong(id), rs.getString(name)) );传进去的 RowMapper就是回调。JdbcTemplate 内部做的事是固定的变化点只有一行rowMapper.mapRow(rs, rowNum);六、总结模板 回调并不等于“继承 抽象方法”。 在现代 Java 项目里它更多以 函数式接口 Lambda 的形式出现。不管是公司事务工具类、Spring TransactionTemplate还是 JdbcTemplate本质都是同一套思想 模板负责流程回调负责变化。