Contents
  1. 1. springMVC的配置和使用
    1. 1.1. springMVC配置
    2. 1.2. Spring MVC的使用
    3. 1.3. 注意事项:重复扫描导致的事务控制失败
  2. 2. Spring 事务控制的实现
    1. 2.1. 7种传播行为
    2. 2.2. 隔离级别
    3. 2.3. 事务控制的实现

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页面

@Controller
public class LoginController {
@Resource
private UserService userService;
@RequestMapping("/login.do")
public ModelAndView login(HttpServletRequest request) {
String username = "huang3";
List<User> user = userService.getAll("huang");
return new ModelAndView("login");
}
}

注意事项:重复扫描导致的事务控制失败

  • 规范的写法,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配置方法名匹配
Contents
  1. 1. springMVC的配置和使用
    1. 1.1. springMVC配置
    2. 1.2. Spring MVC的使用
    3. 1.3. 注意事项:重复扫描导致的事务控制失败
  2. 2. Spring 事务控制的实现
    1. 2.1. 7种传播行为
    2. 2.2. 隔离级别
    3. 2.3. 事务控制的实现