前言
分析搭建SSM框架时的包扫描问题
一、问题
在搭建SSM框架,配置xml文件时,在spring_mvc.xml中只扫描了mvc的包
在spring_config.xml中扫描service的包
二、原因
2.1分析
在web服务器启动时,spring_mvc.xml会先于spring_config.xml启动若整个工程包先被扫描,则service将先于事务启动,那么事务将会无法注入管理,故在spring_mvc.xml只能只扫描mvc的包,而在spring_config.xml中只能扫描service的包。
只在spring.config.xml中扫描所有包,mvc将无法请求对应的controller;
在spring_mvc.xml中扫描了controller的扫描,在spring_config.xml中扫描所有包,controller会被创建两次;
2.2验证
是否被spring IOC管理
可以在调用批量增、删、改的时通过后台打印查看有没有管理的提示:
JDBC Connection [com.mysql.jdbc.JDBC4Connection@7103e78b] will not be managed by Spring
并且每操作一次数据库,都会创建一个新的session,所以当某一条数据出错时,不会回滚。
若纳入管理的提示是:
JDBC Connection [com.mysql.jdbc.JDBC4Connection@29fd1532] will be managed by Spring
并且每次操作不会创建新的session,所以当某一条数据出错时,会回滚所有提交内容。