Spring&MVC框架
Spring的常用功能:
- 依赖注入 IOC的实现原理
- AOP(事务控制、日志管理、注解扫描) 以及实现原理
- MVC 以及实现原理
springMVC的配置和使用
springMVC配置
- 引入相关jar包
web.xml配置
<servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath*:application-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>mvc配置文件设置
<!-- 只能扫描controller层的类包,全部扫描会导致事务失效 --><context:component-scan base-package="com.test.action"/><!-- 模块化编程可以使用下面这种配置方式,全局扫描,但只扫Controller注解<context:component-scan base-package="com.ge" use-default-filters="false"><context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan>--><mvc:annotation-driven/><bean id="viewJspResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/" /><property name="suffix" value=".jsp" /></bean>
Spring MVC的使用
注册request localhost:8080/项目名/login.do请求,并且跳转到 /WEB-INF/views/login.jsp页面
注意事项:重复扫描导致的事务控制失败
- 规范的写法,spring-mvc配置文件会在spring文件扫描之后再扫描而且会覆盖父容器的功能比如事务bean。所以mvc配置文件只能扫controller类包,并且不能在控制层做事务控制。
- 如果mvc和spring配置文件写一起的话,则直接扫描所有包,而且不会有问题。
http://blog.csdn.net/heyanfeng22/article/details/48031357
applicationContext.xml中扫描包和spring-servlet中的扫描包重复了,前者作为父容器先启动并配置了事务,然后spring-servlet.xml再启动,作为子容器也来管理包的内容,但是会覆盖前面applicationContext.xml对包的处理,而新的管理中并没有配置事务,所以事务就失败了
Spring 事务控制的实现
7种传播行为
REQUIRED、SUPPORTS、MANDATORY、NEW
根据业务场景对事务性要求不同,有支持、有必须要在事务下执行、有挂起、有新建不同的行为。
嵌套事务的话,一般最外层事务提交才会导致所有提交,子事务回滚会导致全部回滚
隔离级别
和mysql一样,READ_UNCOMMITTED 、READ_COMMITTED 、REPEATABLE_READ 、SERIALIZABLE,Spring默认的事务隔离级别和数据库的级别一样
事务控制的实现
- 编程式控制:写代码开启事务、提交事务
- 注解式控制
- xml配置方法名匹配