扯淡最近的项目又被别人改了配置文件,还好写了一个数据前后处理顺序错误引发的BUG发现报异常时数据却被删除了惊醒怎么事务没了。
前言:
Spring配置之前写了有3个文件
①spring-context 一般管理配置文件注入
<!-- springMVC配置 --> <import resource="spring-mvc.xml"/> <!-- mybatis配置 --> <import resource="spring-mybatis.xml"/> <!-- shiro配置 --> <import resource="spring-shiro.xml"/>
或是一些不属于前端交互、不属于mybatis框架相关的东西 放这
②spring-mvc
一般就是前端相关, 如配置前后缀、编码格式、文件上传限制大小等等等等
③spring-mybatis
一般是配置DB连接信息 + 事务管理 + 持久层接口映射文件扫描, aop如果有的话一般和事务放一起。
被同事改了配置问题出在哪里呢,说到底我也不明白为什么他要改配置,出发点在哪里我到现在还没理解
原本:
1.spring-context里要配置自动注入到Spring容器, 但是要排除@Service这个Impl实现类里添加的注解, 原因是因为(本项目中)spring容器优先加载spring-context.xml产生的容器, 而此时并没有在spring-context中配置事务 , 故生成的实例对象没有经过事务加强处理是没有事务能力的. 需要在spring-context中exclude掉, 其他照常扫描
<context:component-scan base-package="com.xxxx">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
</context:component-scan>
2.spring-mybatis里要配置自动注入
<!-- 自动扫描com.XXX下的service.impl -->
<context:component-scan base-package="com.xxxx.*" >
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
这里由于我们项目中多个同级包中都可能有@Service , 甚至有些util工具类都加上了@Service作为接口使用,故为com.xxx.*, 此处各位根据自己的去定义即可.
这里要exclude掉Controller是因为之前spring-context已经扫描过了.
要搞清楚这些配置的机制, 推荐读一下Spring源码的解析书籍.
虽然我也不是十分透彻这些机制,但是当全部人搞不定而一下子看出问题的时候...咳咳, 微笑一下就好.