目录
下面是Spring事务
1.Spring事务
事务的四大特征(ACID):
1.原子性(automicity)
事务的每个步骤 要么全部成功 要么全部失败
2.一致性(consistency)
不同的事务需要按顺序执行
3.隔离性(isolation)
事务之间不能相互干扰
4.持久性(durability)
如果系统出故障 保证数据的安全
假如张三有10000元 现在他要给李四转账1000元
张三10000元-1000元 = 9000元
李四3000元 + 1000元= 4000元
我们新建一个账户表
我们新建一个AccountDao接口
再建一个AccountService接口
我们试试能不能转过去
如果张三转账成功 而李四收账失败
这就糟糕了
我们可以用Spring的事务管理器帮我们解决这个问题
使用Spring事务管理器之前 我们先在spring-bean.xml里加点东西
xmlns:tx="http://www.springframework.org/schema/tx"
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
<!-- 配置事务的消息增强 -->
<tx:advice id="tAdvice" transaction-manager="txManager">
<tx:attributes>
<!-- 配置消息通知增强列表,监控的方法由上而下开始匹配,以及事务的传播特性 -->
<tx:method name="find*" propagation="SUPPORTS" />
<tx:method name="query*" propagation="SUPPORTS" />
<tx:method name="add*" />
<tx:method name="delete*" />
<tx:method name="update*" />
<tx:method name="*" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="pointcut" expression="execution(* com.langsin.service.impl.*.*(..))" />
<!-- 配置切面,将消息通知切入到 service 层 -->
<aop:advisor advice-ref="tAdvice" pointcut-ref="pointcut"/>
</aop:config>
这时我们再试试转账
2.SpringMVC
框架原理
我们的用户请求首先到达 前端控制器(就是中间那个红色的)
根据请求的url地址 我们要找到那个要调用的处理器
于是我们就利用处理器映射器(左上角那个蓝的)完成映射
返回一个Handler对象给我们的前端处理器
然后我们知道了要调用哪个处理器 我们就通过处理器适配器(右上角那个蓝的)进行调用处理器
处理器就来完成接收用户请求 拿到用户请求的参数 调用业务逻辑层 数据持久层等的功能
然后把用户的请求结果返回
处理器返回的是一个ModelAndView对象 把它交给处理器适配器 再交给前端控制器
前端控制器通过视图解析器 解析逻辑视图 拿到物理视图
最终将我们的Model(实体类)渲染到视图上去
前端控制器
处理器适配器
处理器映射器
处理器
视图解析器
我们试着写一个SpringMVC的入门程序
新建一个Web工程
在pom.xml里加点依赖
<!-- 引入 Spring 框架的 WebMVC 的依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<!--引入servlet的依赖-->
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
</dependency>
<!--引入jsp的依赖-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
</dependency>
<!-- 引入 JSTL 标签库依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
在往web.xml文件里加点东西
<!-- 配置前端控制器 -->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--配置初始化参数,为 contextConfigLocation 属性指定要加载的 SpringMVC 的配置文件,
如果不配置,则默认加载 DispatcherServlet 的 ServletName 为名称的配置文件,例如:
SpringMVC-servlet.xml
-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-beans.xml</param-value>
</init-param>
</servlet>
<!-- 配置前端控制器的映射 -->
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
我们在main文件夹下新建resources和java文件夹
在resources文件夹下新建spring-beans.xml文件
在里面我们加上
<?xml version="1.0" encoding="utf-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx">
<!-- 配置处理器映射器 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<!-- 配置处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!-- 配置 Handler 处理器 -->
<bean name="/item_list.action" class="com.langsin.controller.BookController"/>
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
我们新建一个Book实体类
再新建一个BookController类 它实现了org.springframework.web.servlet.mvc.Controller这个接口
重写了里面的handleRequest()方法
我们在WEB-INF文件夹下新建一个bookList.jsp
我们这时启动一下这个项目 发现弹出的页面是这样的
我们在网址后面再加上个book_list.action 再按下回车
##THE END##