《spring 4.x 企业应用开发实战》FAQ及勘误表

原创
2017/03/24 11:48
阅读数 8.8K

#FAQ

** Q1 编译时下载类库很慢,编译失败如何解决?**

答:默认Maven从中央仓库下载依赖构建包,由于网速的问题,下载很慢。一般建议安装本地私服,可参考:安装Maven私服,也可以直接使用阿里Maven私服,即更改C:\Users<用户名>.m2\settings.xml中的代码:

 <mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>*</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror> 

具体可参见:aliyun阿里云Maven仓库地址——加速你的maven构建

#勘误表

第2章

chap2 p32 代码清单2-5 findUserByUserName()SQL错了

private  final static String MATCH_COUNT_SQL = " SELECT count(*) FROM t_user  " +
            " WHERE user_name =? `and password=?` ";

=>

private  final static String MATCH_COUNT_SQL = " SELECT count(*) FROM t_user  " +
            " WHERE user_name =?  ";

chap2 代码清单2-10 UserServiceTest

@ContextConfiguration("classpath*:/applicationContext.xml") => @ContextConfiguration("classpath*:/smart-context.xml")

第3章

chap3 代码清单3-8

spring.datasource.max-wait=10000 
spring.datasource.max-active=50 
spring.datasource.max-idle=10
spring.datasource.min-idle=8
spring.datasource.max-wait=10000
spring.datasource.max-active=100
spring.datasource.test-on-borrow=true
spring.datasource.validation-query=select 1

第1,2行删除(因与5,6行重复了)

第4章

chap4 P114 代码清单4-35 ②和③刚好反了

②工厂后处理器 => 注册Bean后处理器 ③注册Bean后处理器 =>注册工厂后处理器

**chap4 P83 包名少了一个lang **

这些反射对象类在java.reflect包中定义。

=>

这些反射对象类在java.lang.reflect包中定义。

第5章

chap5 P132

<!--②引用父容器中的car,而非②处定义的Bean,如 果采用<ref bean="car"/>将引用本容器①处的car -->

改为=>

<!--②引用父容器中的car,而非①处定义的Bean,如 果采用<ref bean="car"/>将引用本容器①处的car -->

chap5 p132 spring 4.x的<ref>移除了local属性的支持

<ref>元素可以通过以下三个属性引用容器中其他Bean。

  • bean:通过该属性可以引用同一容器或父容器的Bean,这是最常见的形式;
  • local:通过该属性只能引用同一配置文件中定义的Bean,它可以利用XML解析器自动检验引用的合法性,以便在开发编写配置时能够及时发现并纠正配置的错误;
  • parent:容器中的Bean,如<ref parent="car">的配置说明car的Bean是父容器中的Bean。

=>

<ref>元素可以通过以下两个属性引用容器中其他Bean。

  • bean:通过该属性可以引用同一容器或父容器的Bean,这是最常见的形式;
  • parent:容器中的Bean,如<ref parent="car">的配置说明car的Bean是父容器中的Bean。

** chap5 p145 **

public static int.REFRESH_CYCLE = 60; 语句中int后多了个"."

=>

public static int REFRESH_CYCLE = 60;

** chap5 p151 **

当然,Spring完全可以提供一个既实现ServletContextListener又实现ServletContextListener接口的监听器。

=>

当然,Spring完全可以提供一个既实现ServletContextListener又实现ServletRequestListener接口的监听器。

第8章

** chap8 P275 代码清单8-4 ** @AspectJ =>@Aspect

第15章

chap15 p448

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"
          p:cacheManager="ehcache"/>

=>

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"
      p:cacheManager-ref="ehcache"/>

第17章

p571 对Matrix Variable功能的默认启动状态描述有误

默认Matrix Variable功能是开启的,如果不希望开启该功能,则需要手工将RequestMappingHandlerMapping 中的 removeSemicolonContent 属性设置为true即可: <mvc:annotation-driven enable-matrix-variables="true"/>

=>

默认Matrix Variable功能是关闭的,如果希望开启该功能,则需要手工将RequestMappingHandlerMapping 中的 removeSemicolonContent 属性设置为true: <mvc:annotation-driven enable-matrix-variables="true"/>

展开阅读全文
打赏
7
15 收藏
分享
加载中
2017 年 1 月第1版,129页最底部的 bean,其工厂方法( factory-method) 属性的值不应该是 createHongQiCar 吗?
2020/04/13 20:40
回复
举报
第2章那里,如果SQL里面只保留一个参数,但是后面的 getMatchCount 方法里面在执行查询的时候依然传两个参数进去,这不是会出错吗
2020/04/09 21:07
回复
举报
输入正确的用户名和密码后,调到欢迎页面报错如下。好像是回滚出错了。我吧代码唯一的改动是pom.xml的spring.version改为 <spring.version>4.2.6.RELEASE</spring.version>,因为提供的4.2.2有问题,无法下载到本地,网上有人如此改的。
=====================http://localhost:8000/bbs/loginCheck.html==================================
HTTP ERROR 500
Problem accessing /bbs/loginCheck.html. Reason:

PreparedStatementCallback; SQL [ UPDATE t_user SET last_visit=?,last_ip=?,credits=? WHERE user_id =?]; Could not retrieve transation read-only status server; nested exception is java.sql.SQLException: Could not retrieve transation read-only status server
Caused by:
org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [ UPDATE t_user SET last_visit=?,last_ip=?,credits=? WHERE user_id =?]; Could not retrieve transation read-only status server; nested exception is java.sql.SQLException: Could not retrieve transation read-only status server
  =======================================================
2019/08/07 01:23
回复
举报
第二章入门项目必须用java7.0吗?我用的是·java1.8.0,然后程序运行的时候只有登录界面,一按登录就会跳出http:500,报错说UserDao里的一个sql语句有问题,可我跟作者和评论里的大佬说的改了,还是有错,这个该怎么解决?
2018/09/03 08:46
回复
举报
必须用java7.0吗?我用的是·java1.8.0,然后程序运行的时候只有登录界面,一按登录就会跳出http:500,报错说UserDao里的一个sql语句有问题,可我跟作者和评论里的大佬说的改了,还是有错,这个该怎么解决?
2018/09/03 08:45
回复
举报
第二章那个
private final static String MATCH_COUNT_SQL = " SELECT count(*) FROM t_user " +
" WHERE user_name =? `and password=?` ";
正确的写法应该是
private final static String MATCH_COUNT_SQL="SELECT * FROM "+
" t_user WHERE user_name = ?";
上面写的那个sql语句还是错的
2018/03/13 21:46
回复
举报

引用来自“midiyu”的评论

老师第二章那个findUserByUserName()SQL对着呢,去掉程序反而运行不了。。。。
我以为要改成如下:select * from t_user where user_name = ?
2018/01/09 14:33
回复
举报
说真的现在使用了 idea 的语言注入功能后,完全不需要担心空格的问题了,idea 会自动在字符串中的 sql 语句中两行之间插入 \n 换行符的,感觉可以稍微提一下使用 idea 的语言注入来避免各种 sql 语句相关的错误(尤其是直接手写容易出现的失误),虽然不是错误,不过吾辈果然还是先提一下更好的解决方案。。。
来自:2.3.2 末尾的 实战经验
2017/11/18 19:15
回复
举报
老师第二章那个findUserByUserName()SQL对着呢,去掉程序反而运行不了。。。。
2017/11/13 22:14
回复
举报

引用来自“landy8530”的评论

我买的是2017年5月第三次印刷的版本,代码清单2-7中,mysql的端口号是3306,而你在后面的描述中说是3309.----一位来自厦门的java从业者敬上!

引用来自“HiAscend”的评论

你确定你的是2017年五月第三次印刷??
京东买的。书本上看的版次,难道买到盗版的?
2017/09/08 09:48
回复
举报
更多评论
打赏
15 评论
15 收藏
7
分享
返回顶部
顶部