- 浏览: 400637 次
- 性别:
- 来自: 南京
最新评论
-
x981114171:
不知大家有没发现,国产书,国人写的书就没几本是给力的,以后国人 ...
《Spring技术内幕》的读者问题交流 -
x981114171:
买了这本书,感觉很不值。来吐槽下,也许你自己是专家,不过写的书 ...
《Spring技术内幕》的读者问题交流 -
851228082:
作者,写的书很好,我觉得幸亏有源码,所以我才能看懂。一边看,一 ...
《Spring技术内幕》的读者问题交流 -
yueshang520:
说的真不错。。学习了
Spring技术内幕——深入解析Spring架构与设计原理(一)IOC实现原理 -
faith789510:
TransactionProxyFactoryBean 什么情 ...
Spring源代码解析(六):Spring声明式事务处理
最近事情实在是比较多,没有及时更新帖子,还望大家见谅啊。今天,一起讨论讨论Spring JDBC的实现吧。
关于Spring JDBC
还是从Spring JDBC说起吧,虽然现在应用很多都是直接使用Hibernate或者其他的ORM工具。但JDBC毕竟还是很基本的,其中的JdbcTemplate就是我们经常使用的,比如JDBCTemplate的execute方法,就是一个基本的方法,在这个方法的实现中,可以看到对数据库操作的基本过程。
在使用数据库的时候,有一个很重要的地方就是对数据库连接的管理,在这里,是由DataSourceUtils来完成的。Spring通过这个辅助类来对数据的Connection进行管理。比如通过它来完成打开和关闭Connection等操作。DataSourceUtils对这些数据库Connection管理的实现, 如以下代码所示。
关于数据库操作类RDBMS
从JdbcTemplate中,我们看到,他提供了许多简单查询和更新的功能。但是,如果需要更高层次的抽象,以及更面向对象的方法来访问数据库,Spring为我们提供了org.springframework.jdbc.object包,里面包含了SqlQuery、SqlMappingQuery、SqlUpdate和StoredProcedure等类,这些类都是Spring JDBC应用程序可以使用的。但要注意,在使用这些类时需要为它们配置好JdbcTemplate作为其基本的操作实现,因为在它们的功能实现中,对数据库操作的那部分实现基本上还是依赖于JdbcTemplate来完成的。
比如,对MappingSqlQuery使用的过程,是非常简洁的;在设计好数据的映射代码之后,查询得到的记录已经按照前面的设计转换为对象List了,一条查询记录对应于一个数据对象,可以把数据库的数据记录直接映射成Java对象在程序中使用,同时又可避免使用第三方ORM工具的配置,对于简单的数据映射场合是非常方便的;在mapRow方法的实现中提供的数据转换规则,和我们使用Hibernate时,Hibernate的hbm文件起到的作用是非常类似的。这个MappingSqlQuery需要的对设置进行compile,这些compile是这样完成的,如以下代码所示:
在Spring对JDBC的操作中,基本上是对JDBC/Hibernate基础上API的封装。这些封装可以直接使用,也可以在IoC容器中配置好了再使用,当结合IoC容器的基础上进行使用的时候,可以看到许多和事务管理相关的处理部分,都是非常值得学习的,在那里,可以看到对数据源的管理 - Hibernate中session的管理,与线程的结合等等。
以这些文章为底子,写的书,在http://hzbook.group.iteye.com/group/blog/560085有一些介绍,上面有目录。
对事务管理,SPRING是通过拦截器来实现的,AOP用得很巧妙。
你的看法很对啊,我也是这样想的。不过,我觉得如果看书的话,比较适合梳理知识,毕竟我们的阅读习惯都是在书本中养成的,然后遇到详细和难解的地方,再去hack代码,这样就相得益彰了。一开始就去直接看代码,还是需要一点勇气的,如果有文档能够起到一个引领入门的作用,那就很好了,这也是在下正在努力的地方。
谢谢您的建议和对楼主文章的肯定,楼主这么好的文章,出版社肯定是不会错过的。
提前爆料一下,楼主将基于Spring的源代码来解析Spring的架构以及设计原理,出版一本叫做《Spring技术内幕——深入解析Spring架构与设计原理》的书,旨在给以下几个方面的读者以启发:
1. 学习 Java语言和Java EE技术的中高级读者
Spring是使用Java语言实现的,它的很多功能的源代码的设计和实现都极其优秀,非常具有研究价值。对这部分读者来说,不仅可以从本书中了解到Spring的实现原理,而且还能通过Spring的源代码,掌握大量的Java编码技巧和Java EE开发技术。
2. Spring应用开发人员
如果要利用Spring进行高级应用开发,抑或是进行相关的优化和扩展工作,仅仅掌握Spring的配置和基本使用是远远不够的,我们必须要对Spring框架的设计原理、架构和运作机制有一定的了解。对这部分读者而言,本书将带领他们全面了解Spring实现原理,从而加深对Spring框架的理解,提高自己的开发水平。同时,本书可以作为他们定制和扩展Spring框架的参考资料。
3. 开源软件爱好者
Spring是开源软件中的佼佼者,它在实现的过程中吸收了很多开源领域的优秀思想,同时也有很多值得其他开源软件学习的创新。尤为值得一提的是,本书分析Spring源代码的方式,也许值得所有想分析开源软件源代码的开源软件爱好者们学习和借鉴。通过阅读本书,这部分读者不仅能领略到开源软件的优秀思想,而且掌握分析开源软件源代码的方法和技巧,从而进一步提高使用开源软件的效率和质量。
[b]4. 平台开发人员和架构师[/b]
前面已经反复强调,Spring的设计思想、架构和实现都是非常优秀的,是平台开发人员和架构师们不可多得的参考资料。
关于Spring JDBC
还是从Spring JDBC说起吧,虽然现在应用很多都是直接使用Hibernate或者其他的ORM工具。但JDBC毕竟还是很基本的,其中的JdbcTemplate就是我们经常使用的,比如JDBCTemplate的execute方法,就是一个基本的方法,在这个方法的实现中,可以看到对数据库操作的基本过程。
//execute方法执行的是输入的sql语句 public void execute(final String sql) throws DataAccessException { if (logger.isDebugEnabled()) { logger.debug("Executing SQL statement [" + sql + "]"); } class ExecuteStatementCallback implements StatementCallback<Object>, SqlProvider { public Object doInStatement(Statement stmt) throws SQLException { stmt.execute(sql); return null; } public String getSql() { return sql; } } execute(new ExecuteStatementCallback()); } //这是使用java.sql.Statement处理静态SQL语句的方法 public <T> T execute(StatementCallback<T> action) throws DataAccessException { Assert.notNull(action, "Callback object must not be null"); //这里取得数据库的Connection,这个数据库的Connection已经在Spring的事务管理之下 Connection con = DataSourceUtils.getConnection(getDataSource()); Statement stmt = null; try { Connection conToUse = con; if (this.nativeJdbcExtractor != null && this.nativeJdbcExtractor.isNativeConnectionNecessaryForNativeStatements()) { conToUse = this.nativeJdbcExtractor.getNativeConnection(con); } //创建Statement stmt = conToUse.createStatement(); applyStatementSettings(stmt); Statement stmtToUse = stmt; if (this.nativeJdbcExtractor != null) { stmtToUse = this.nativeJdbcExtractor.getNativeStatement(stmt); } //这里调用回调函数 T result = action.doInStatement(stmtToUse); handleWarnings(stmt); return result; } catch (SQLException ex) { // Release Connection early, to avoid potential connection pool deadlock // in the case when the exception translator hasn't been initialized yet. //如果捕捉到数据库异常,把数据库Connection释放,同时抛出一个经过Spring转换过的Spring数据库异常 //Spring做了一项有意义的工作,就是把这些数据库异常统一到自己的异常体系里了 JdbcUtils.closeStatement(stmt); stmt = null; DataSourceUtils.releaseConnection(con, getDataSource()); con = null; throw getExceptionTranslator().translate("StatementCallback", getSql(action), ex); } finally { JdbcUtils.closeStatement(stmt); //释放数据库connection DataSourceUtils.releaseConnection(con, getDataSource()); } }
在使用数据库的时候,有一个很重要的地方就是对数据库连接的管理,在这里,是由DataSourceUtils来完成的。Spring通过这个辅助类来对数据的Connection进行管理。比如通过它来完成打开和关闭Connection等操作。DataSourceUtils对这些数据库Connection管理的实现, 如以下代码所示。
//这是取得数据库连接的调用,实现是通过调用doGetConnection完成的,这里执行了异常的转换操作 public static Connection getConnection(DataSource dataSource) throws CannotGetJdbcConnectionException { try { return doGetConnection(dataSource); } catch (SQLException ex) { throw new CannotGetJdbcConnectionException("Could not get JDBC Connection", ex); } } public static Connection doGetConnection(DataSource dataSource) throws SQLException { Assert.notNull(dataSource, "No DataSource specified"); //把对数据库的Connection放到事务管理中进行管理,这里使用TransactionSynchronizationManager中定义的ThreadLocal变量来和线程绑定数据库连接 //如果在TransactionSynchronizationManager中已经有与当前线程绑定数据库连接,那就直接取出来使用 ConnectionHolder conHolder = (ConnectionHolder) TransactionSynchronizationManager.getResource(dataSource); if (conHolder != null && (conHolder.hasConnection() || conHolder.isSynchronizedWithTransaction())) { conHolder.requested(); if (!conHolder.hasConnection()) { logger.debug("Fetching resumed JDBC Connection from DataSource"); conHolder.setConnection(dataSource.getConnection()); } return conHolder.getConnection(); } // Else we either got no holder or an empty thread-bound holder here. // 这里得到需要的数据库Connection,在Bean配置文件中定义好的, // 同时最后把新打开的数据库Connection通过TransactionSynchronizationManager和当前线程绑定起来。 logger.debug("Fetching JDBC Connection from DataSource"); Connection con = dataSource.getConnection(); if (TransactionSynchronizationManager.isSynchronizationActive()) { logger.debug("Registering transaction synchronization for JDBC Connection"); // Use same Connection for further JDBC actions within the transaction. // Thread-bound object will get removed by synchronization at transaction completion. ConnectionHolder holderToUse = conHolder; if (holderToUse == null) { holderToUse = new ConnectionHolder(con); } else { holderToUse.setConnection(con); } holderToUse.requested(); TransactionSynchronizationManager.registerSynchronization( new ConnectionSynchronization(holderToUse, dataSource)); holderToUse.setSynchronizedWithTransaction(true); if (holderToUse != conHolder) { TransactionSynchronizationManager.bindResource(dataSource, holderToUse); } } return con; }
关于数据库操作类RDBMS
从JdbcTemplate中,我们看到,他提供了许多简单查询和更新的功能。但是,如果需要更高层次的抽象,以及更面向对象的方法来访问数据库,Spring为我们提供了org.springframework.jdbc.object包,里面包含了SqlQuery、SqlMappingQuery、SqlUpdate和StoredProcedure等类,这些类都是Spring JDBC应用程序可以使用的。但要注意,在使用这些类时需要为它们配置好JdbcTemplate作为其基本的操作实现,因为在它们的功能实现中,对数据库操作的那部分实现基本上还是依赖于JdbcTemplate来完成的。
比如,对MappingSqlQuery使用的过程,是非常简洁的;在设计好数据的映射代码之后,查询得到的记录已经按照前面的设计转换为对象List了,一条查询记录对应于一个数据对象,可以把数据库的数据记录直接映射成Java对象在程序中使用,同时又可避免使用第三方ORM工具的配置,对于简单的数据映射场合是非常方便的;在mapRow方法的实现中提供的数据转换规则,和我们使用Hibernate时,Hibernate的hbm文件起到的作用是非常类似的。这个MappingSqlQuery需要的对设置进行compile,这些compile是这样完成的,如以下代码所示:
protected final void compileInternal() { //这里是对参数的compile过程,所有的参数都在getDeclaredParameters里面,生成了一个PreparedStatementCreatorFactory this.preparedStatementFactory = new PreparedStatementCreatorFactory(getSql(), getDeclaredParameters()); this.preparedStatementFactory.setResultSetType(getResultSetType()); this.preparedStatementFactory.setUpdatableResults(isUpdatableResults()); this.preparedStatementFactory.setReturnGeneratedKeys(isReturnGeneratedKeys()); if (getGeneratedKeysColumnNames() != null) { this.preparedStatementFactory.setGeneratedKeysColumnNames(getGeneratedKeysColumnNames()); } this.preparedStatementFactory.setNativeJdbcExtractor(getJdbcTemplate().getNativeJdbcExtractor()); onCompileInternal(); }在执行查询时,执行的实际上是SqlQuery的executeByNamedParam方法,这个方法需要完成的工作包括配置SQL语句,配置数据记录到数据对象的转换的RowMapper,然后使用JdbcTemplate来完成数据的查询,并启动数据记录到Java数据对象的转换,如以下代码所示:
public List<T> executeByNamedParam(Map<String, ?> paramMap, Map context) throws DataAccessException { validateNamedParameters(paramMap); //得到需要执行的SQL语句 ParsedSql parsedSql = getParsedSql(); MapSqlParameterSource paramSource = new MapSqlParameterSource(paramMap); String sqlToUse = NamedParameterUtils.substituteNamedParameters(parsedSql, paramSource); //配置好SQL语句需要的Parameters及rowMapper,这个rowMapper完成数据记录到对象的转换 Object[] params = NamedParameterUtils.buildValueArray(parsedSql, paramSource, getDeclaredParameters()); RowMapper<T> rowMapper = newRowMapper(params, context); //我们又看到了JdbcTemplate,这里使用JdbcTemplate来完成对数据库的查询操作,所以我们说JdbcTemplate是非常基本的操作类 return getJdbcTemplate().query(newPreparedStatementCreator(sqlToUse, params), rowMapper); }
在Spring对JDBC的操作中,基本上是对JDBC/Hibernate基础上API的封装。这些封装可以直接使用,也可以在IoC容器中配置好了再使用,当结合IoC容器的基础上进行使用的时候,可以看到许多和事务管理相关的处理部分,都是非常值得学习的,在那里,可以看到对数据源的管理 - Hibernate中session的管理,与线程的结合等等。
评论
16 楼
jiwenke
2010-01-03
godspeed_yjx 写道
楼主,能不能把你的这个系列的文章做一个目录出来啊,我想系统的看一下。
以这些文章为底子,写的书,在http://hzbook.group.iteye.com/group/blog/560085有一些介绍,上面有目录。
15 楼
godspeed_yjx
2009-12-26
楼主,能不能把你的这个系列的文章做一个目录出来啊,我想系统的看一下。
14 楼
jiwenke
2009-12-20
把异常贴出来看看,一起讨论讨论?
13 楼
leejon
2009-12-20
有一个问题想请教下LZ。
我在写springJdbc Demo的时候,在更新数据上碰到个问题:
用JdbcTemplate做查询,可以。但是做更新的操作的时候就出问题了。
麻烦指教一下,谢谢!
我在写springJdbc Demo的时候,在更新数据上碰到个问题:
用JdbcTemplate做查询,可以。但是做更新的操作的时候就出问题了。
@Test public void update() { String sql = "update user set name='newValue' where id=5"; jdbcTemplate.update(sql); }
@Test public void update() { String sql = "update User set name=:name where id=:id"; Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put("id", 5); paramMap.put("name", "newValue"); int i = template.update(sql, paramMap); System.out.println(i); }
麻烦指教一下,谢谢!
12 楼
linux1689
2009-12-20
我和楼主是好朋友啦!
楼主最近刚出版了《Spring技术内幕——深入解析Spring架构与设计原理》,我是这本书的策划编辑,所以就······
楼主最近刚出版了《Spring技术内幕——深入解析Spring架构与设计原理》,我是这本书的策划编辑,所以就······
11 楼
Turbo
2009-12-18
linux1689和楼主同一个人还是有密切利益相关啊,经常看到一唱一和。
10 楼
jiwenke
2009-11-08
zou-hong 写道
我也觉得回调的这个写法也可适用于事务管理
对事务管理,SPRING是通过拦截器来实现的,AOP用得很巧妙。
9 楼
zou-hong
2009-11-05
我也觉得回调的这个写法也可适用于事务管理
8 楼
linux1689
2009-11-04
分析源码的书更重要的是授人以渔!
7 楼
jiwenke
2009-11-04
rrsy23 写道
这样书难写
写简单了没有人要
写复杂 还是没有人要
要么看不懂
看懂的人就去看源码了
写简单了没有人要
写复杂 还是没有人要
要么看不懂
看懂的人就去看源码了
你的看法很对啊,我也是这样想的。不过,我觉得如果看书的话,比较适合梳理知识,毕竟我们的阅读习惯都是在书本中养成的,然后遇到详细和难解的地方,再去hack代码,这样就相得益彰了。一开始就去直接看代码,还是需要一点勇气的,如果有文档能够起到一个引领入门的作用,那就很好了,这也是在下正在努力的地方。
6 楼
rrsy23
2009-11-04
这样书难写
写简单了没有人要
写复杂 还是没有人要
要么看不懂
看懂的人就去看源码了
好处难出
最近写了什么spring揭秘 其实 就是 口水话翻译国外的书
写简单了没有人要
写复杂 还是没有人要
要么看不懂
看懂的人就去看源码了
好处难出
最近写了什么spring揭秘 其实 就是 口水话翻译国外的书
5 楼
rrsy23
2009-11-04
分析源码 只有 自己看
看文章 难看懂
看文章 难看懂
4 楼
linux1689
2009-11-04
lengyun3566 写道
建议楼主出书吧
谢谢您的建议和对楼主文章的肯定,楼主这么好的文章,出版社肯定是不会错过的。
提前爆料一下,楼主将基于Spring的源代码来解析Spring的架构以及设计原理,出版一本叫做《Spring技术内幕——深入解析Spring架构与设计原理》的书,旨在给以下几个方面的读者以启发:
1. 学习 Java语言和Java EE技术的中高级读者
Spring是使用Java语言实现的,它的很多功能的源代码的设计和实现都极其优秀,非常具有研究价值。对这部分读者来说,不仅可以从本书中了解到Spring的实现原理,而且还能通过Spring的源代码,掌握大量的Java编码技巧和Java EE开发技术。
2. Spring应用开发人员
如果要利用Spring进行高级应用开发,抑或是进行相关的优化和扩展工作,仅仅掌握Spring的配置和基本使用是远远不够的,我们必须要对Spring框架的设计原理、架构和运作机制有一定的了解。对这部分读者而言,本书将带领他们全面了解Spring实现原理,从而加深对Spring框架的理解,提高自己的开发水平。同时,本书可以作为他们定制和扩展Spring框架的参考资料。
3. 开源软件爱好者
Spring是开源软件中的佼佼者,它在实现的过程中吸收了很多开源领域的优秀思想,同时也有很多值得其他开源软件学习的创新。尤为值得一提的是,本书分析Spring源代码的方式,也许值得所有想分析开源软件源代码的开源软件爱好者们学习和借鉴。通过阅读本书,这部分读者不仅能领略到开源软件的优秀思想,而且掌握分析开源软件源代码的方法和技巧,从而进一步提高使用开源软件的效率和质量。
[b]4. 平台开发人员和架构师[/b]
前面已经反复强调,Spring的设计思想、架构和实现都是非常优秀的,是平台开发人员和架构师们不可多得的参考资料。
3 楼
prowl
2009-11-04
貌似回调的这个写法也可适用于事务管理
2 楼
zhxing
2009-11-04
lz 能把这些整理一下,做成ptf 应该会很好。。
看了分析,有点模糊,但觉得不错。。
看了分析,有点模糊,但觉得不错。。
1 楼
lengyun3566
2009-11-04
建议楼主出书吧
发表评论
-
开放注册了!我们的任务推客 - 群组任务和流程协同SaaS工具
2010-06-30 20:31 621经过这几天团队的努力,为软件增加了开放注册功能,大家可以自己动 ... -
我们团队研发的SaaS软件产品:应用于群组任务协同和流程管理
2010-06-21 15:39 846任务协同及流程管理SaaS软件:任务推客上线,欢迎大家免费体验 ... -
随笔:Spring与云计算(六)
2009-12-17 18:49 3769这样,就说到国内了, ... -
随笔:Spring与云计算(五)
2009-12-16 19:58 3382那其他呢,我们看看还 ... -
随笔:Spring与云计算(四)
2009-12-15 16:26 4149前面我们提到,Spring被VMWare收购而进入云计算领域, ... -
随笔:Spring与云计算(三)
2009-12-14 14:05 3723在前面的那张图中,可以看到SpringSource产品和云计算 ... -
随笔:Spring与云计算(二)
2009-12-11 14:57 4304这么大的范围的模式转 ... -
随笔:Spring与云计算(一)
2009-12-10 15:19 6962对Spring和云计算的关注 ... -
《Spring技术内幕 - 深入解析Spring架构与设计原理》上市了!
2009-12-09 15:17 9103详细的书本目录和章节节选请见附件!欢迎下载指正。 可以购买到 ... -
Spring技术内幕——深入解析Spring架构与设计原理(六)Spring ACEGI
2009-11-20 12:27 14531Spring ACEGI 作为Spring丰富生态系统中的一个 ... -
Spring技术内幕——深入解析Spring架构与设计原理(五)Spring与远端调用
2009-11-16 20:23 11166在应用开发中,常常涉及服务器系统中各种不同进程之间的通信与计算 ... -
Spring技术内幕——深入解析Spring架构与设计原理(四)Web MVC的实现
2009-11-08 08:55 21225以前的欠账,现在补上,欢迎指正和讨论。 Spring Web ... -
Spring技术内幕——深入解析Spring架构与设计原理(二)AOP
2009-10-20 08:30 23075关于AOP的个人理解 AOP联盟定义的AOP体系结构把与AO ... -
Spring技术内幕——深入解析Spring架构与设计原理(一)IOC实现原理
2009-10-19 10:47 98948内容较多,新开一贴, ... -
Spring技术内幕——深入解析Spring架构与设计原理(一)引子
2009-10-17 20:31 11245缘起 已经很久没有写 ... -
Hadoop的mapred JobTracker端源码概览
2009-02-18 19:40 5203上一节看到TaskTracker启动新任务的过程,这里接着看看 ... -
Hadoop的mapred TaskTracker端源码概览
2009-02-17 14:39 4111花了许多功夫把Hadoop的mapreduce实现过了一遍,基 ... -
Hadoop的mapred TaskTracker端源码概览
2009-02-17 14:37 1649这篇文章和博客的另一篇重复,删掉了。对不起,请参阅博客的另一篇 ... -
发布用javaeye生成的博客版本 - Spring源代码解析
2008-11-20 08:49 3632呵呵,试试javaeye的新功能。帮助大家阅读,文中的很多错误 ... -
Spring源代码解析(十):Spring Acegi框架授权的实现
2007-08-17 11:01 4903我们从FilterSecurityInterceptor我们从 ...
相关推荐
Spring技术内幕:深入解析Spring架构与设计原理 Spring技术内幕 Spring是一个基于Java的开源框架,旨在简化Java企业应用的开发。Spring的目标是提供一个简洁、灵活、可扩展的框架,以帮助开发者快速构建企业级...
《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》从源代码的角度对Spring的内核和各个主要功能模块的架构、设计和实现原理进行了深入剖析。你不仅能从本书中参透Spring框架的出色架构和设计思想,还能从...
本书《Struts2技术内幕——深入解析Struts2架构设计与实现原理》结合提供的《struts2基础.chm》资料,为我们提供了深入理解Struts2内部机制的机会。 首先,Struts2的核心在于它的拦截器(Interceptor)机制。拦截器...
SPRING技术内幕:深入解析SPRING架构与设计原理
《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》这本书主要聚焦于Spring框架的核心架构和技术细节,帮助读者全面理解Spring的工作机制、设计理念以及实现方式。下面将根据书名及其描述来展开相关知识点。 ...
Spring技术内幕:深入解析Spring架构与设计原理 Spring是Java企业应用开发的主要框架之一,其架构和设计原理对Java开发者具有重要影响。本文将深入解析Spring架构和设计原理,对Spring的核心概念、架构设计和关键...
Spring技术内幕 深入解析Spring架构与设计原理1(完整清晰版),一共两部分,这是第一部分 《Spring技术内幕:深入解析Spring架构与设计原理》是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自...
本书从源代码的角度对Spring的内核和各个主要功能模块的架构、设计和实现原理进行了深入剖析。你不仅能从本书中参透Spring框架的优秀架构和设计思想,还能从Spring优雅的实现源码中一窥Java语言的精髓。本书在开篇...
Spring技术内幕 深入解析Spring架构与设计原理3(完整清晰版),你懂的。下载后请您回复支持一下。
Spring技术内幕——深入解析Spring架构与设计 (揭秘系列丛书) - 计文柯.mobi
在深入解析Spring技术内幕第2版中,会详细探讨Spring框架的核心架构与设计原理,Spring作为一个轻量级的Java平台,提供了全面的编程和配置模型,是企业级Java应用程序开发中广泛使用的技术之一。 Spring的核心特性...
Spring技术内幕-深入解析Spring架构与设计原理.pdf
Spring技术内幕:深入解析Spring架构与设计原理(第2部分) 《Spring技术内幕:深入解析Spring架构与设计原理》是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自执笔!Java开发者社区和Spring...
SPRING技术内幕:深入解析SPRING架构与设计原理.pdf(带书签)
Spring技术内幕:深入解析Spring架构与设计原理(第2版)》是国内唯一一本系统分析Spring源代码的著作,也是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自执笔,Java开发者社区和Spring开发者...
这本书《Struts2技术内幕——深入解析Struts2架构设计与实现原理》深入探讨了Struts2的核心机制和设计理念,旨在帮助开发者更好地理解和运用这个框架。 首先,Struts2的出现是为了解决Struts1在MVC模式中的局限性,...