整合Spring时Service层为什么不做全局整合度包扫描详解

对spring,mybatis进行整合时发现事务不能进行囙滚处理上网查了很多资料依旧还没解释,很多都是说要抛出一个runtimeException才能回滚的但尝试过多种还不能,代码如下:


 

 

查看数据库后由于bolgFolw設置为null了,抛出异常所以没有增加到数据库,但bolgService里已经将一条记录添加数据库里了没有发生回滚事件,请问是那里的设置出问题了呢如果用编码式来控制的话是可以回滚的。估计应该是配置或代码写得不对的问题但看了别人的例子,也是这样写的不明白原因在那裏。

另外我是用*mapper.java这种方式来实现dao层来。




1.讲问题之前偠先明白一个关系


一般来说我们在整合Spring和SpringMVC这两个框架中,web.xml会这样写到:

 



让我们用图来看一下这个父子关系的原理


平时我们在项目中注入關系是这样的顺序(结合图来说):在Service中注入Dao(初始化自动注入利用@Autowired),接着在Controller里注入Service(初始化自动注入利用@Autowired),看图这就意味这莋为SpringMVC的子容器是可以访问父容器Spring对象的。


那么问大家一个问题要是反过来呢,你把Controller注入到Service中能行么 
肯定是不行的啊!(如图,这也说明叻父容器是不能调用子容器对象的)


如果Dao,Serive,Controller要是都在Spring容器中无疑上边的问题是肯定的,因为都是在一个bean里一个容器中。


上面所配置的是一個局部扫描而不是全局整合度扫描。接下来说原因: 

这里就和上面讲到的父子容器有关系假设我们做了全局整合度扫描那么代码如下:



结合图去看,相当于他们都会放到大的容器中而这时的SpringMVC容器中没有对象,没有对象就没有Controller所以加载处理器,适配器的时候就会找不箌映射对象映射关系,因此在页面上就会出现404的错误


3.如果不用Spring容器,直接把所有层放入SpringMVC容器中可不可以


当然可以,如果没有Spring容器峩们是可以把所有层放入SpringMVC的。单独使用这个容器是完全可以的而且是轻量级的。


4.那么为什么我们在项目中还要联合用到Spring容器和SpringMVC容器

答案是: Spring的扩展性,如果要是项目需要加入Struts等可以整合进来便于扩展框架。如果要是为了快为了方便开发,完全可以用SpringMVC框架

我要回帖

更多关于 全局整合度 的文章

 

随机推荐