Spring重复扫描导致事务失败的解决方案及深入分析
spring如果要使事务生效,就需要cglib为service生成代理子类 而spring扫描器扫描@Service注解已近生成了子类,如果再让springmvc 又重新扫描了一遍,使得原先cglib生成的代理子类失效,从而事务拦截也失效。
spring.xml
<!-- 自动扫描 ,忽略@Controller注解的类-->
<context:component-scan base-package="com.xx.xxx.yy">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:exclude-filter>
</context:component-scan>
spring-mvc.xml
<!--自动扫描该包,使spring-mvc只扫描controller包中的类(其中只有@Controller控制器),不会重复扫描到@Service或者@Component-->
<context:component-scan base-package="com.xx.xxx.cc">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"></context:exclude-filter>
</context:component-scan>