




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Spring Spring 是 J2EE 应用程序框架 是轻量级的 IoC 和 AOP 的容器框架 主要是针对 javaBean 的生命周期进行管理的轻量级容器 可以单独使用 也可以和 Struts 框架 Mybatis 框架等组合使用 Spring 为企业级应用的开发提供了一个轻量级 耦合度低 的解决方案 包括 1 依赖注入 IOC 2 面向切面编程 AOP Spring 对声明式事务处理 3 对 Dao 的支持 整合 JDBC MyBatis Hibernate 等 4 对 Web 的支持 SpringMVC 优点 1 低侵入方案 2 IOC 容器降低了业务对象替换的复杂性 解耦 3 AOP 支持了一些事务 安全 日志等集中管理 4 对 Dao 的支持和第三方持久层框架的支持 简化底层数据库的访问 框架结构如图 1 IOC IOC 控制反转 传统情况下 创建对象通过 new 的方式 或者通过工厂获取 IOC 将对象 的创建交给容器去管理 类似于 Servlet 容器 容器可以去创建对象 初始化对象等 容 器去管理对象的生命周期 DI 依赖注入 一个类可以有若干个属性 可以通过 IOC 的方式获取对象 对象的属性都是 默认初始化 可以通过 set 方法注入或者是构造方法注入对应的值 在 org springframework beans and org springframework context packages are the basis for Spring Framework s IoC container ApplicationContext 对应 IOC container 1 1 创建创建 IOC 容器容器 引入相关 jar 文件 1 1 1写配置文件写配置文件 配置文件的文件头可以去文档中找 1 1 2测试测试 结果 在创建 IOC 容器时 User 类中的无参的构造方法被调用 1 1 3延迟创建延迟创建 Bean 当配置文件中的 bean 比较多的时候 考虑性能问题 部分 bean 可以在使用时创建 通过容器去调用 getBean 方法时创建 配置 如果对整个配置文件中的所有的 bean 都要延迟创建 在 xml 文件头中添加属性 1 1 4Bean 的单例的单例 默认情况下 IOC 容器创建 Bean 的方式按照单例的方式创建的 在容器中多次调用 getBean 方法获取同一个 bean 对应的地址是相同的 默认不设置 scope 就是单例的 多次获取的时候 从缓存中获取 bean 的 如果 scope 设置成 prototype 代表是多例的方式获取 bean 每次取 getBean 的时候去 创建 1 1 5LifeCycle 生命周期生命周期 在 bean 中配置 init method 和 destroy method 指定初始化和销毁对应的要执行的方 法的方法名 1 2 DI 对应的 User 类中有相关的属性的定义 考虑 在容器实例化 User 时 对相关的属性进行赋值 在 javase 阶段时通过 new 无参的构造方法 再调用 set 方法进行赋值或者直接调用有 参的构造方法处理 可以通过 DI 的方式注入对应的值 注入的两种方式 set 方法注入和构造方法注入 1 2 1 Set 方法注入方法注入 User 类中对应的属性提供 set 方法 否则有异常 配置 在 bean 标签中添加标签 name 属性指定属性名 value 属性指定属性值 ref 属性指定引用 当类的属性的内容是基本数据类型 String 等用 value 如果是其他的引用类型 使用 ref 指定其他的 bean 的 id 1 2 2 构造方法注入构造方法注入 使用标签 指定构造方法参数 属性 index 指定参数的位置 默认从 0 开始 type 指定参数的类型 value 指定参数的值 ref 指定参数的引用 1 2 3 其他属性的注入其他属性的注入 比如 List Set Map Properties 参考文档 5 4 2 节 1 2 4 总结总结 两种注入方式 1 set 方法注入 只需要属性提共 set 方法 2 构造方法注入 不够灵活 不能有效的控制指定的参数的值 1 2 5 p namespace 在 xml 文件头中引入 原来通过 set 方法注入的内容 使用标签 引入 p 的命名空间后可以改成 1 2 6 c namespace 原来使用构造方法注入 1 3 Autowiring 自动装配自动装配 在一个类中可以有其他类的引用 这个引用的类的赋值问题 1 通过 set 方法注入 2 构造方法注入 3 自动装配 本身类对应的对象是有容器去创建的 保存在内存中 自动装配的方式 byName 根据 bean 的 id 装配 要求 bean 的 id 和属性的名称一致 byType 根据 bean 的类型装配 要求该类型对应的 bean 只能有一个实例 提供 dao 和 service 在 UserServiceImpl 中提供 IUserDao 的引用 并提供 set 方法 配置 1 4 基于基于Annotation 开发开发 1 4 1 引入引入 context 的命名空间的命名空间 在文档的 5 10 2 中 1 4 2 在配置文件中添加在配置文件中添加 1 4 3 注解注解 Component 通用的 Repository 用于 DAO Service 用于业务层 Controller 用于控制器 在 SpringMVC 使用 默认情况下 bean 的 id 是类名 首字母小写 Autowired 用于自动装配 测试 2 AOP 2 1 代理模式代理模式 提供接口 提供实现类 现要求在每个方法执行之前打印日志输出 写一个类 提供一个方法 用于创建 Computer 接口的代理对象 测试输出 在类中提供一个目标对象 完善 InvocationHandler 中的方法 测试 在执行 add 方法之前有日志输出 2 2 总结总结 代理对象是对目标对象的一种扩展 补充 可以附加其他的内容 实际调用时还是 调用目标对象的业务逻辑 2 3AOP 面向切面编程面向切面编程 是对 OOP 的补充 OOP 引入封装 继承和多态性等概念来建立一种对象层次结构 用以模拟公共行为的一个集合 当我们需要为分散的对象引入公共行为的时候 OOP 则显得无能为力 也就是说 OOP 允许你定义从上到下的关系 但并不适 合定义从左到右的关系 例如日志功能 日志代码往往水平地散布在所有对象层 次中 而与它所散布到的对象的核心功能毫无关系 对于其他类型的代码 如安 全性 异常处理和透明的持续性也是如此 这种散布在各处的无关的代码被称为 横切 cross cutting 代码 在 OOP 设计中 它导致了大量代码的重复 而不利 于各个模块的重用 AOP 技术则恰恰相反 它利用一种称为 横切 的技术 并将那些影响了多个类的 公共行为封装到一个可重用模块 并将其名为 Aspect 即切面 所谓 切面 简 单地说 就是将那些与业务无关 却为业务模块所共同调用的逻辑或责任封装起 来 便于减少系统的重复代码 降低模块间的耦合度 并有利于未来的可操作性 和可维护性 2 4AOP 术语术语 横切关注点 非业务需求 切面 Aspect 模块化的横切关注点 通知 Advice 切面要执行的内容 非业务需求 根据切点表达式进行绑定 分为 5 种类型的通知 连接点 Joinpoint 切点 Pointcut 1 连接点 连接点 Joinpoint 程序执行的某个特定位置 如类开始初始化前 类初始化后 类某个方法调用前 调 用后 方法抛出异常后 一个类或一段程序代码拥有一些具有边界性质的特定点 这些点 中的特定点就称为 连接点 Spring 仅支持方法的连接点 即仅能在方法调用前 方法调 用后 方法抛出异常时以及方法调用前后这些程序执行点织入增强 连接点由两个信息确 定 第一是用方法表示的程序执行点 第二是用相对点表示的方位 2 切点 切点 Pointcut 每个程序类都拥有多个连接点 如一个拥有两个方法的类 这两个方法都是连接点 即连接点是程序类中客观存在的事物 AOP 通过 切点 定位特定的连接点 连接点相当于 数据库中的记录 而切点相当于查询条件 切点和连接点不是一对一的关系 一个切点可 以匹配多个连接点 在 Spring 中 切点通过 org springframework aop Pointcut 接口 进行描述 它使用类和方法作为连接点的查询条件 Spring AOP 的规则解析引擎负责切 点所设定的查询条件 找到对应的连接点 其实确切地说 不能称之为查询连接点 因为 连接点是方法执行前 执行后等包括方位信息的具体程序执行点 而切点只定位到某个方 法上 所以如果希望定位到具体连接点上 还需要提供方位信息 3 增强 增强 Advice 增强是织入到目标类连接点上的一段程序代码 在 Spring 中 增强除用于描述一段程 序代码外 还拥有另一个和连接点相关的信息 这便是执行点的方位 结合执行点方位信 息和切点信息 我们就可以找到特定的连接点 4 目标对象 目标对象 Target 增强逻辑的织入目标类 如果没有 AOP 目标业务类需要自己实现所有逻辑 而在 AOP 的帮助下 目标业务类只实现那些非横切逻辑的程序逻辑 而性能监视和事务管理等 这些横切逻辑则可以使用 AOP 动态织入到特定的连接点上 5 引介 引介 Introduction 引介是一种特殊的增强 它为类添加一些属性和方法 这样 即使一个业务类原本没 有实现某个接口 通过 AOP 的引介功能 我们可以动态地为该业务类添加接口的实现逻 辑 让业务类成为这个接口的实现类 6 织入 织入 Weaving 织入是将增强添加对目标类具体连接点上的过程 AOP 像一台织布机 将目标类 增 强或引介通过 AOP 这台织布机天衣无缝地编织到一起 根据不同的实现技术 AOP 有三 种织入的方式 a 编译期织入 这要求使用特殊的 Java 编译器 b 类装载期织入 这要求使用特殊的类装载器 c 动态代理织入 在运行期为目标类添加增强生成子类的方式 Spring 采用动态代理织入 而 AspectJ 采用编译期织入和类装载期织入 7 代理 代理 Proxy 一个类被 AOP 织入增强后 就产出了一个结果类 它是融合了原类和增强逻辑的代理 类 根据不同的代理方式 代理类既可能是和原类具有相同接口的类 也可能就是原类的 子类 所以我们可以采用调用原类相同的方式调用代理类 8 切面 切面 Aspect 切面由切点和增强 引介 组成 它既包括了横切逻辑的定义 也包括了连接点的定 义 Spring AOP 就是负责实施切面的框架 它将切面所定义的横切逻辑织入到切面所指 定的连接点中 2 5切点表达式切点表达式 切入点表达式 通常情况下 表达式中使用 execution 就可以满足大部分的要求 表达式格式如下 Java 代码代码 1 execution modifiers pattern ret type pattern declaring type pattern name p attern param pattern throws pattern modifiers pattern 方法的操作权限 ret type pattern 返回值 declaring type pattern 方法所在的包 name pattern 方法名 parm pattern 参数名 throws pattern 异常 其中 除 ret type pattern 和 name pattern 之外 其他都是可选的 2 6基于注解基于注解 AOP 开发开发 在 spring 配置文件中引入 aop 命名空间 在配置文件中配置基于注解 AOP 动态代理 2 6 1创建日志切面类创建日志切面类 需要使用 Aspect 声明该类是个切面类 使用 Component 声明当前切面类由容器实例化 如果有多个切面时 需要指定执行的顺序 2 6 2通知通知 Advice 前置通知 后置通知 结果返回通知 异常通知 环绕通知 proceed 用于执行目标方法 2 7基于配置的基于配置的 AOP 了解了解 在事务管理的时候统一使用配置的方式 1 配置切面 2 Aop 配置 3 Spring 整合整合 JDBC Spring 本身提供了对 DAO 的支持 传统 DAO 开发 1 加载驱动 2 获取数据库连接对象 3 获取 Statement 对象 4 执行 SQL 5 如果有结果集 处理结果集 6 释放资源 Spring 对 DAO 的支持 提供了数据源 可以从数据源中获取数据库连接对象 还提供了一 个父类 JdbcDaoSupport 可以让 DAO 的实现类去继承该类 有 JdbcTemplete 类可以执行的 CRUD 操作 或者直接在 Dao 实现类中注入 JdbcTemplete 3 1 数据源的配置数据源的配置 可以有 dbcp c3p0 等 具体的配置参照文档 第 14 章 3 2 在在 Dao 中注入中注入 JdbcTemplete 3 3 在配置文件中配置在配置文件中配置 JdbcTemplete 3 4 配置配置 Dao 的自动的自动 IOC 3 5 Dao 实现实现 CRUD 3 6 测试测试 3 7 总结总结 JdbcTemplete 对象的使用参考文档 14 2 1 Dao 实现类也可以直接继承 JdbcDaoSupport 在 JdbcDaoSupport 中有 JdbcTemplete 属性的引用 4 事务事务 事务是指作为单个逻辑工作单元执行的一系列操作 要么完全地执行 要么完全地不 执行 传统情况下使用 JDBC 管理事务 采用编程式管理 关闭自动提交 改为手动提交 出异常时回滚 采用 Spring 的 AOP 的机制 模块化管理事务 Spring 中提供了声明式处理事务 通过 Transactional 通常情况下 一般会将事务管理添加在业务层方法上 有些业务层方 法可能多次调用 dao 要保证数据的有效性 事务的 ACID 特性 原子性 一个事务是一个不可分割的工作单位 事务中包括的诸操作要么都做 要么都不做 一致性 事务必须是使数据库从一个一致性状态变到另一个一致性状态 一致性 与原子性是密切相关的 隔离性 一个事务的执行不能被其他事务干扰 即一个事务内部的操作及使用的 数据对并发的其他事务是隔离的 并发执行的各个事务之间不能互相干扰 持久性 持久性也称永久性 permanence 指一个事务一旦提交 它对数据库 中数据的改变就应该是永久性的 接下来的其他操作或故障不应该对其有任何影响 4 1 配置事务管理器配置事务管理器 4 2 启动事务注解启动事务注解 先引用事务的命名空间 再启动事务注解 4 3 Dao 设计设计 在 User 类中添加 balance 余额属性 在 Product 类中添加 store 库存属性 在 IUserDao 中添加查询余额和更新余额的方法 在 IProductDao 中添加查询商品价格 查询库存和更新库存的方法 设计 2 个业务异常 一个是余额不足异常 一个是商品库存不足异常 IUserDao 的实现 IProductDao 实现 4 4 业务实现业务实现 提供业务接口用于购买商品 业务方法要添加 Transactional 当前业务方法绑定事务 设置 rollbackFor 属性指定哪 些异常回滚 Transactional 的属性设置 4 5 事务的传播行为事务的传播行为 在业务层的方法中都已绑定事务 如果业务层方法互相调用时 需要控制事务的传 播行为 如果使用 Transactional 默认不设置传播行为 默认是 Propagation REQUIRED Propagation REQUIRED 支持当前事务 如果当前没有事务就创建一个事务 如果当前有事 务就使用当前事务 Propagation REQUIRES NEW 如果当前有事务 将当前事务挂起 执行自己的事务 4 5 1提供结账功能业务提供结账功能业务 多次调用多次调用 buy 业务业务 对 buy 业务中的事务管理设置不同的传播行为 REQUIRED REQUIRES NEW 测试 账户余额 800 元 有商品 1 价格为 100 商品 2 价格为 200 分别买 4 本 库 存都是 10 本 如果是 REQUIRED 测试结果 商品都未购买成功 如果是 REQUIRES NEW 测试结果 商品 1 购买成功 修改了商品的库存和账户的余额 购买商品 2 时 余额不足 回滚 到购买商品 2 时的状态 4 6 基于配置的事务管理基于配置的事务管理 需要在 xml 文件中对事务进行 aop 配置 本身业务方法会有很多 对所有的业务方法添加 Transactional 不太方便 借助 于 AOP 配置 4 7 事务并发导致的问题事务并发导致的问题 涉及到事务的隔离性 事务并发导致的问题 现有 A 事务 B 事务 一个账户有 1000 元 A 事务开启 B 事务开启 A 事务去取 500 块 不提交 B 事务去读取数据 读到 账户余额为 500 块 A 事务回滚 B 事务读到的数据是无效的 把 B 事务读到的 数据理解为脏数据 脏读 A 事务开启 B 事务开启 B 事务读取 账户余额为 1000 A 事务取 500 并提交 B 事务再读取 账户余额为 500 B 事务两次读到的数据不一致 重复读 A 事务开启 B 事务开启 B 事务读取行记录 记录数是 N A 事务对数据进行 insert 或者是 delete 操作 并提交 B 事务再次读取行记录 发现记录数不是 N 幻影读 对应的解决办法 事务的隔离级别 有 4 个 READ UNCOMMITTED 幻影读 不可重复读和脏读都允许 READ COMMITTED 允许幻影读 重复读 不允许脏读 Oracle 默认的事务隔离级 别 REPEATABLE READ 允许幻影读 不允许重复读和脏读 SERIALIZABLE 幻想读 不可重复读和脏读都不允许 序列化 Oracle 默认的事务隔离级别是 READ COMMITTED 还支持 SERIALIZABLE 设置数据库的隔离级别 使用 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE 5 Spring 整合整合 MyBatis 使用 Mybatis 加载配置文件获取 SqlSessionFactoryBuilder 对象 创建 SqlSessionFactory 对象 再获取 SqlSession 对象 可以执行 CRUD 管理事务 获取 Mapper 代理 执行 CRUD 的时候 通过底层的 Executor 执行器接口 底层调用 MappedStatement 执 行对应的 SQL 可以传入参数 可以映射结果 采用 Mapper 代理开发的 Spring 本身有许多的配置文件 MyBatis 也有配置文件 后续还有其他框架的配置文件 可以考虑对配置文件进行集中管理 新建一个 source folder 专门存放配置文件 原本 Mybatis 的配置文件中配置 1 引用 properties 2 全局的 settings 3 别名 typeAliases 4 运行环境 environments 5 映射 mappers Spring 去整合 DAO 可以提供引入 properties 提供数据源 在 Mybatis 的配置文件中 可以将 property 和 environments 删除 5 1 配置文件结构 配置文件结构 5 2applicationContext xml 文件的配置文件的配置 配置数据源 使用 Mybatis 需要先获取 SqlSessionFactory 对象 对象建议最好是单例的 考虑由 Spring 去创建 SqlSessionFactory 对象 默认创建的对象就是单例的 Mybatis 使用代理开发 批量引入配置文件 要求映射文件和接口在同一个包中 名 字相同 在 Mybatis 的配置文件中使用 Spring 和 Mybatis 整合 提供了一个专门扫描 mapper 接口的包生成 mapper 代理对象 的 bean org mybatis spring mapper MapperScannerConfigurer 配置该 bean 默认 产生的 mapper 代理的 bean 的 id 是类名 首字母小写 5 3测试测试 6 MVC 软件要分层 三层架构 表现层 控制层 业务层 持久层 层与层之间的内聚性要增强 每一层只做自己的事情 传统 MVC 的设计思想 M 模型 V 视图 C 控制器 Model1 servlet javabean Sevlet 既做表现层也做控制层 代码没有分离 管理不方便 Model2 Servlet JSP JavaBean 将原来 Servlet 中做表现逻辑的代码剥离出来写入到 JSP 中 Servlet 只做控制逻辑 一个请求对应一个 Servlet 处理的 Servlet 的配置量大 维护成本高 MVC 框架 让所有请求都经过一个 Servlet 叫 ActionServlet 作为控制器 用于分发请求 通过配置 的方式配置请求和请求对应的处理类 通过配置的方式配置请求处理的结果和响应的内容 请求解析 返回结果逻辑视图名 渲染显示 解析逻辑视图返回物理视图 通过配置的方式 将 M 和 V M 和 C 分离 在一定程度上降低了代码的耦合度 处理请求的类依赖于 Action 类 扩展性比较差 只能支持单一视图 JSP HTML 浏览 器 发送请求 Servlet ServiceDao DB 响应 Controller Actio nServlet 执行 init 方法封装对象树 包含请求的处 理类 映射的处 理 获取对应的请 求处理类 Model 执行 Action Service Dao View JSP HTML SpringMVC 的原理 请求 请求处理器映射器 找处理请求的 Handler 返回 Handler 执行器链 视图渲染 请求处理器适配器 请求视图解析执行 Handler 器进行视图解析 返回视图返回 ModelAndView 执行 返回 ModelAndView 流程 1 浏览器发送请求到前端控制器 DispatcherServlet 2 前端控制器请求处理器映射器去找对应处理该请求的 Handler 3 处理器映射器返回 HandlerExecutionChain 执行器链 包含若干个 HandlerInterceptor 和 Handler 给前端控制器 4 前端控制器请求处理器适配器对象执行 Handler 5 处理器适配器对象执行 Handler 6 Handler 执行完成后 返回 ModelAndView 给处理器适配器 7 处理器适配器将 ModelAndView 返回给前端控制器 8 前端控制器请求视图解析器解析视图 9 视图解析器返回物理视图给前端控制器 10 前端控制器将 Model 中的数据填充到指定视图上 11 响应 核心组件 1 前端控制器 DispatcherServlet Spring 提供的 不需要开发 需要在 web xml 文件中 进行配置 2 处理器映射器 HandlerMapping Spring 提供的 不需要开发 需要在 spring 的配置 文件中配置 3 处理器适配器 HanderAdapter Spring 提供的 不需要开发 需要在 spring 的配置文 前端控制器 DispatcherServlet HandlerMapping 处理器映射器 HandlerAdapter 处理器适配器 Handler 相当于 Controller ViewResolver 视图解析器 View 视图 JSP HTML PDF JSO N Text Excel 等等 件中配置 4 Handler 需要程序员开发 基于 HanderAdapter 的要求去开发 5 ModelAndView 模型和视图 直接 new 6 视图解析器ViewResolver Spring 提供的 不需要开发 需要在 spring 的配置文件 中配置 7 View jsp 程序员开发 Spring 的 IOC ApplicationContext 是一个接口 直接去 new ClassPathXMLApplicationContext 还有一个实现类叫WebApplicationContext 6 1 SpringMVC 开发开发 引入 jar 文件 6 2 配置配置 DispatcherServlet 在 web xml 文件中进行配置 6 3 配置配置 SpringMVC 配置处理器映射器 处理器适配器 视图解析器 写 Handler 配置 Handler 6 3 1 先配置处理器适配器先配置处理器适配器 6 3 2 写写 Handler 用于处理请求的 用于处理请求的 当前配置的 SimpleControllerHandlerAdapter 要求 Handler 实现 Controller 接口 6 3 3 配置配置 Handler Handler 用于处理请求的 这个 bean 也应该由容器去创建 考虑问题是 Handler 处理请求 如何和请求的 URL 绑定 先配置处理器映射器 6 3 4 配置处理器映射器配置处理器映射器 要求 bean 的 name 作为 url 进行映射 对 Handler 的 bean 中添加 name 属性 6 3 5 配置视图解析器配置视图解析器 支持 JSTL 6 3 6 测试测试 6 3 7 总结总结 使用了非注解的处理器适配器 处理器映射器 SpringMVC 中还提供了其他的处理器适配器和处理器映射器 HandlerMapping 接口的实现类 BeanNameUrlHandlerMapping SimpleUrlHandlerMapping 通过注入 Map 指定 url 和 Controller HandlerAdapter 接口的实现类 SimpleControllerHandlerAdapter 要求 Handler 实现 Controller 接口 SimpleServletHandlerAdapter 要求 Handler 实现 Servlet 接口 用 Servlet 的 API 使用了视图解析器 ViewResolver 的实现类 InternalResourceViewResolver 支持 JSP JSTL 可以配置前缀和后缀 当前端控制器拿到 ModelAndView 时 会通过视图解析器解析视图 会得到 前缀 逻辑视 图名 后缀 拼接出一个物理视图 用于渲染显示的 如果没有配置处理器映射器 处理器适配器 视图解析器 也是能够正常执行的 在 SpringMVC 的 jar 中有个属性配置文件 DispatcherServlet properties 文件中配置了许多的处理 器映射器 处理器适配器 视图解析器 本身是默认加载的 6 4 基于注解的基于注解的 SpringMVC 开发开发 必须掌握必须掌握 提供了 2 个 Bean 处理器适配器和处理器映射器 6 4 1配置处理器适配器和处理器映射器配置处理器适配器和处理器映射器 RequestMappingHandlerMapping RequestMappingHandlerAdapter 引入 mvc 的命名空间 使用 MVC 命名空间注解驱动 6 4 2写控制器写控制器 Handler Spring 中提供了一个注解叫 Controller 一个 bean 如果加上该注解 代表该类就是控制器类 在方法上加上 RequestMapping listUser do 指定处理的 URL 6 4 3配置配置 Handler 自动 IOC 6 4 4测试测试 地址栏输入 http localhost 8888 SSM listUser do 6 4 5总结总结 注解的处理器映射器 注解的处理器适配器 必须配套使用 注解的处理器适配器 org springframework web servlet mvc method annotation RequestMappingHandlerAdapter 注解的处理器映射器 org springframework web servlet mvc method annotation RequestMappingHandlerMapping 可以手动配置上面的两个 bean 或者配置 能够替代上面两个基于 注解的处理器适配器和映射器的配置 需要引入 mvc 的命名空间 推荐使用 还包含了其他的类型的转换器 6 SpringMVC 整合整合 Spring MyBatis Spring 和 MyBatis 整合的时候 有部分 Spring 的配置文件 applicationContext dao xml applicationContext service xml applicationContext dao xml 整合了 MyBatis applicationContext service xml 整合了 事务 在创建 DispatcherServlet 时 ApplicationContext 容器本身就创建 不需要多次创建其 他的容器对象 解决方案提供监听器 SpringMvc 就有这样的监听器 6 1 监听器和上下文参数配置监听器和上下文参数配置 6 2 在在 Handler 中调用业务层中调用业务层 6 3测试测试 浏览器地址栏输入 http localhost 8888 SSM listUser do 6 4Handler 处理器处理请求的方法设置处理器处理请求的方法设置 6 4 1方法返回方法返回 ModelAndView 参考之前的代码 6 4 2方法返回方法返回 void 原来使用 Servlet 进行控制层开发的时候默认处理请求的 service 方法就是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全日培训总结课件
- 有关购房合同汇编5篇
- 货运轮船买卖合同3篇
- 瑞士瑞妍细胞美疗课件
- 2025年日照市中考英语试题(附答案)
- 东莞乐园泳池工程方案(3篇)
- 农业生态保护与现代种业创新基地建设项目可行性研究
- 玻璃厂工伤预防知识培训课件
- 猫课件教学课件
- 猫咪聚会课件
- GB/T 25088-2010道路车辆牵引车和挂车之间的电连接器24 V 7芯辅助型(24S)
- 24h药房温湿度记录表
- 中小学教育管理试题和答案
- X射线衍射课件(XRD)
- 一标三实单位调查表
- 收款账户确认书
- 室内电梯安装工程安全技术交底
- 小儿支气管肺炎课件
- DB32-T 3751-2020公共建筑能源审计标准-(高清现行)
- 销盘式摩擦磨损试验机设计
- 原创领袖的风采-易发久
评论
0/150
提交评论