spring注意事项

1.spring容器与springMVC容器冲突(spring version 4.0.2.RELEASE) php

        SpringMVC容器是Spring容器的一个子容器,它一样可以初始化实体类。因为SpringMVC容器的初始化是在Spring容器初始化以后,因此它会替换Spring中已经存在的类,这样可能会致使冲突web

        (1)只在applicationContext.xml中配置以下spring

<context:component-scan base-package="com.pz" />

                启动正常,可是任何请求都不会被拦截,简而言之就是@Controller失效express

        (2)只在spring-servlet.xml中配置上述配置app

                启动正常,请求也正常,可是事物失效,也就是不能进行回滚code

        (3)在applicationContext.xml和spring-servlet.xml中都配置上述信息component

                启动正常,请求正常,也是事物失效,不能进行回滚xml

         所以将action单独配置在一个包中,若是已有项目没法改变,则用如下配置事务

<!--spring容器 -->
<context:component-scan base-package="com.pz">
	<!-- 不扫描@Controller -->
	<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>

<!-- springMVC容器 -->
<context:component-scan base-package="com.pz.web">
	<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
	<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan>

结论:在spring-servlet.xml中只须要扫描全部带@Controller注解的类,在applicationContext中能够扫描全部其余带有注解的类(也能够过滤掉带@Controller注解的类)。get

引用:由于spring的context是父子容器,因此会产生冲突,Controller会进步前辈行扫描装配,而此时的Service尚未进行事务的增强处理惩罚,得到的将是原样的Service(没有通过事务增强处理惩罚,故而没有事务处理惩罚才能) ,最后才是applicationContext.xml中的扫描设备进行事务处理惩罚

相关文章
相关标签/搜索