spring mvc 作为非常 成熟的 J2EE 架构方案,适合大规模的业务平台架设。
它是spring项目的一部分,但是,在配置时,它一般的spring项目有点不一样。
spring容器是 springmvc 容器的父容器,springmvc 可以访问 spring 容器,反之则不可。
可以通过这篇文章来了解:
http://sishuok.com/forum/blogPost/list/5188.html
spring是采用 log4j 格式,可以在 log4j.properties 里添加
log4j.logger.org.springframework=INFO
来打印关键数据。
springmvc 有一个配置文件,spring也有一个配置文件。那么,这两个文件的配置应该如何分配呢?这是最容易犯的错误。方法是:
The rule of thumb is: put every thing in the inner context, except that stuff that requires a Servlet context or is heavily tied to the Web-frontend, like MVC-Controllers, Tiles configuration, ....
也就是说,应该将尽可能多的配置放到 spring配置里,将 servlet或者web相关的放到 spring mvc配置里。
两个配置文件就是独立的,springmvc 配置 不能import spring配置(否则会出现 duplicate bean definition. 参见: http://stackoverflow.com/questions/22436195/all-spring-framework-beans-get-duplicated-becase-of-doubled-context-servletco )
以下是另一些常见错误:
如果你将自动导入
<context:component-scan base-package="com.baidu" />
放到 springmvc 配置文件里,就会出现这个问题。你会发现,啊,事务不起作用了啊!!!!!
原因看这里:
http://stackoverflow.com/questions/10019426/spring-transactional-not-working
这里我的理解是:因为 spring扫描了类,spring mvc也扫描了类,那么,事务注解到底是在spring容器里实现呢?还是在springmvc容器里呢?
如果是在spring容器里,那么,很OK,事务可以正常WORK。如果不幸在springmvc容器里,那么,事务就无法spring容器里实现了!
因此,解决办法就是,不要在springmvc进行扫描类!!
这时,你肯定会有疑问,那 springmvc 需要的类不扫描怎么办?回答是:spring容器帮你扫描了,springmvc是spring的子容器,它可以访问 那些controller类。
这里教大家一个技巧,如何判定事务有没有啊?方法是, 在 DataSourceTransactionManager 类里设置断点。 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/transaction.html
请将所有interceptor 配置放到 spring配置里。