Hello all, I'm a local Spring developer in Oregon, and mostly I develop web modules using Spring 3 MVC technology. I own a few Spring 2.5 and 3 books for myself including this book, and I read those books with Spring 3 reference documentation on SpringSource.org as I needed. For my general review, Spring in Action 3rd edition is filled with fine-grained Spring 3 technologies so far, but for some parts it needs more information.
First three chapters are very well done for building Spring 3 basic skills including Spring 3 bean management and Spring bean XML configuration. Based on Spring 3, we know there are quite a few changes; obviously some changes are bigger than the older versions. This book explains very well for Spring 3 configuration using a few unique annotation-based Spring beans. For example, we can do auto-wired bean injection directly through the java classes using @Autowired or @Inject annotation without re-configuring XML codes. We can also use auto configuration scanning feature using <context:component-scan> without repeatedly writing bean configuration over-and-over again; Craig explains them very well with some easy example codes. I like his example codes with funny names like knight, king, jelly beans, pizza, and so on; those names sometimes make me hungry. Hmm... :)
Chapter 4 (Aspect-oriented Spring) has a few good examples and explains very well for fundamental concept of AOP, but it needs more information. For example, AOP proxy and its interceptor XML configuration are very useful when you inject Spring beans into the other beans between two different scopes (singleton and session). "BeanNameAutoProxyCreator" is also useful class for interrupting other beans based on bean names; for our development, me and my other co-workers love to use this method because some beans are still working on progress, and I don't want other developers to use my beans until I finish my job; so I can put my sign "DO NOT TOUCH!" on my lovely beans. :) Comparing process performance between CGLib and JDK Proxy(default AOP engine on Spring) might be also useful if you're concerning about AOP engine performance. I hope Craig puts more about Spring AOP on those methods in his book. Generally, this chapter has well-balanced AOP information between Spring AOP and AspectJ.
Chapter 5,6 need more work. I was a bit frustrated by lack of information on the Spring JDBC template usage. On the chapter 5, Craig explains very well for Spring JDBC templates, but it needs more information. For example, there is no information about SimpleJdbcInsert, handling CLOB and BLOB (good for handling binary objects and files). Some methods on the example code don't even have explanation at all. Specifically, the sample method on page 129, where is the "queryForIdentity()"?; I went MANNING publisher website and download the example source code, and I finally figured out what this method means and how this method works. There is also better way to do the Jdbc Insertion. Crag needs to write more information about SimpleJdbcInsert method; basically it is using keyholding mechanism for auto-generated insertion ID and return it back when Jdbc inserts data into table. Data insertion using "executeAndReturnKey()" is a lot safer than using general insertion method for data transaction integrity. For Spring transaction, I hope there are both traditional using transactionproxyfactorybean with transaction advice and the Spring 3 annotation based transaction examples.
Chapter 7 Spring MVC needs more work. Crag did good job for Annotation-based bean and its XML configuration part, there are a few important information are missing! These are HandlerInterceptor (mvc: xmlns interceptor), Spring Message Taglib (traditional way of displaying messages than annotation-based form validation), and i18n(Internationalization). Applying Spring AOP for MVC controller and service components are very useful for web server security and the service delivery without modifying existing source code; a few good examples are keyword-filtering, secure loggings, and selecting processors depending on which URL with which queries passed to your MVC controller and service components. This book must explain how to use those handlers (pre and post handlers for MVC controllers). Internationalization using "SessionLocaleResolver" and "ReloadableResourceBundleMessageSource" is also important; you can put all the i18n messages using UTF-8 (DO NOT put BOM!) encording; then Spring "LocaleChangeInterceptor" will trigger the message display depending on your language preference.
Even with a few complains, Spring in Action 3rd is another well-written book for Spring 3. Crag mostly did great job on this book; I cannot believe that he wrote this book by himself! "Craig , you rock!" However, I recommend either FIY(Find It Yourself) on Spring reference documentation and Spring forums if this book is not enough for you. Thank you for reading my review.