一直搞不清在ssh中 struts和spring分别担任什么样的角色 总觉得它们都是mvc框架。别人告诉说,Struts是纯MVC框架,spring 只是有一个组件是MVC。搜到了下面一篇文章,对我的理解有了帮助。

在SSH框假中spring充当了管理容器的角色。我们都知道Hibernate用来做持久层,因

为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不用书写大量的SQL语

句。Struts是用来做应用层的,他它负责调用业务逻辑serivce层。所以SSH框架的流程大致

是:Jsp页面----Struts------Service(业务逻辑处理类)---Hibernate(左到右)

struts负责控制Service(业务逻辑处理类),从而控制了Service的生命周期,这样层与层之间的

依赖和强,属于耦合。这时,使用spring框架就起到了控制Action对象(Strus中的)和

Service类的作用,两者之间的关系就松散了,Spring的Ioc机制(控制反转和依赖注入)正

是用在此处。

Spring的Ioc(控制反转和依赖注入)

控制反转:就是由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直

接操控。

依赖注入:组件之间的依赖关系由容器在运行期决定 ,由容器动态的将某种依赖关系注

入到组件之中。

从上面我们不难看出:从头到尾Action仅仅是充当了Service的控制工具,这些具体的

业务方法是怎样实现的,他根本就不会管,也不会问,他只要知道这些业务实现类所提供的

方法接口就可以了。而在以往单独使用Struts框架的时候,所有的业务方法类的生命周期,

甚至是一些业务流程都是由Action来控制的。层与层之间耦合性太紧密了,既降低了数据访

问的效率又使业务逻辑看起来很复杂,代码量也很多。,Spring容器控制所有Action对象和

业务逻辑类的生命周期,由与上层不再控制下层的生命周期,层与层之间实现了完全脱耦,

使程序运行起来效率更高,维护起来也方便。

使用Spring的第二个好处(AOP应用):

 

     事务的处理:

在以往的JDBCTemplate中事务提交成功,异常处理都是通过Try/Catch 来完成,而在

Spring中。Spring容器集成了TransactionTemplate,她封装了所有对事务处理的功能,

包括异常时事务回滚,操作成功时数据提交等复杂业务功能。这都是由Spring容器来管理,

大大减少了程序员的代码量,也对事务有了很好的管理控制。Hibernate中也有对事务的管

理,hibernate中事务管理是通过SessionFactory创建和维护Session来完成。而Spring对

SessionFactory配置也进行了整合,不需要在通过hibernate.cfg.xml来对

SessionaFactory进行设定。这样的话就可以很好的利用Sping对事务管理强大功能。避免

了每次对数据操作都要现获得Session实例来启动事务/提交/回滚事务还有繁琐的

Try/Catch操作。这些也就是Spring中的AOP(面向切面编程)机制很好的应用。一方面使

开发业务逻辑更清晰、专业分工更加容易进行。另一方面就是应用Spirng  AOP隔离降低了

程序的耦合性使我们可以在不同的应用中将各个切面结合起来使用大大提高了代码重用度。

其实现流程:根据jsp页面中form 的action 到struts配置文件中找到相应的action 的path属性,再根据name属性找到相应的formBean;再者是根据action到spring配置文件中找对应的bean 的name 属性和 type属性,(spring也要通过插件plag-in的方式进行配置);ActionForm实现表单元素和实体属性的绑定,从action 的parameter属性里找DispatchAction中相对应的方法,执行底层代码。

转载于:https://blog.51cto.com/shuimomo/437173

Spring在SSH中的角色和作用相关推荐

  1. 【转】SSH中 整合spring和proxool 连接池

    [摘要:比来做的一个项目中应用到了毗邻池技巧,大概我们人人比拟认识的开源毗邻池有dbcp,c3p0,proxool.对那三种毗邻池来讲,从机能战失足率来讲,proxool轻微比前两种好些.本日我首要简 ...

  2. Spring中@AliasFor注解的作用及原理

    本文基于Springboot 2.1.6.RELEASE 版本分析. 关于@AliasFor注解,曾提过的一个issue Explicit attribute overrides configured ...

  3. spring service 怎么拿到数据源信息_SSM(SpringMVC + Spring + MyBatis)中各层作用及关系Ⅰ...

    1.持久层:DAO层(mapper层)(属于mybatis模块) DAO层:主要负责与数据库进行交互设计,用来处理数据的持久化工作. DAO层的设计首先是设计DAO的接口,也就是项目中你看到的Dao包 ...

  4. java代码中 作用_Java利用开发中代码生成工具的作用

    Java利用开发中代码生成工具的作用 2010-6-5文字大小:大中小 近来,随着各种代码生成工具的不断涌现(如SpringSource的Spring Roo.Skyway Builder Commu ...

  5. 【设计模式系列20】解释器模式原理及其在JDK和Spring源码中的体现

    解释器模式原理及其在JDK源码中的体现 设计模式系列总览 前言 什么是解释器模式 终结符表达式和非终结符表达式 解释器模式示例 解释器模式角色 解释器模式在JDK和Spring源码中应用 解释器模式应 ...

  6. Guava Cache本地缓存在 Spring Boot应用中的实践

    概述 在如今高并发的互联网应用中,缓存的地位举足轻重,对提升程序性能帮助不小.而 3.x开始的 Spring也引入了对 Cache的支持,那对于如今发展得如火如荼的 Spring Boot来说自然也是 ...

  7. spring boot 项目源码_Spring Boot2 系列教程(三)理解 Spring Boot 项目中的 parent

    前面和大伙聊了 Spring Boot 项目的三种创建方式,这三种创建方式,无论是哪一种,创建成功后,pom.xml 坐标文件中都有如下一段引用: <parent><groupId& ...

  8. 在Spring、Hibernate中使用Ehcache缓存

    前一篇http://blog.csdn.net/ibm_hoojo/article/details/7739181介绍了Ehcache整合Spring缓存,使用页面.对象缓存:这里将介绍在Hibern ...

  9. JNDI 在 J2EE 中的角色

    JNDI 在 J2EE 中的角色 Spring整合HIbernate时,三种数据库连接池的配置和比较 Tomcat 6 JNDI数据源详解 Tomcat 6 --- JNDI详解 Spring整合HI ...

最新文章

  1. flutter开发中常用的dart插件
  2. Linux下的十个好用的命令工具:查看系统版本,显示目录的大小,查看硬盘HDD/SSD,硬盘测速,ssh时自动输入密码,查看程序的内存使用情况,查看I/O的速度,查看ssh密码错误日志,查找文件
  3. 防止******ADSL的一些技巧
  4. cocos2d-x之读取json文件
  5. 连接数process与会话session
  6. 简单的点击展开/关闭效果
  7. STL源代码分析(ch2 内存分配)jjalloc.h
  8. iOS自定义的UISwitch按钮
  9. java phantomjs_Java爬虫:Jsoup + Phantomjs
  10. 多久能学会前端?怎么学?
  11. 基于JAVA+SpringMVC+Mybatis+MYSQL的企业客户管理系统
  12. Python+pickle读写二进制文件小案例
  13. 如何从Web浏览器远程监视Linux服务器和桌面
  14. 企业搜索引擎(Enterprise Search Engine)的2007中重要的功能
  15. 基于bert的情感分类
  16. win10卓越性能模式开启方法
  17. word文档转换为md文档
  18. spa计算机技术,Spathis, Promethee
  19. 李瑞霖4.13黄金走势短线放空原油能否筑底反弹?行情涨跌分析
  20. 超详细的WMS仓储管理系统介绍——补货篇

热门文章

  1. win11窗口拖动卡顿怎么办 Windows11窗口拖动卡顿的解决方法
  2. 不可重复读和幻读的区别_面试官:MySQL的可重复读级别能解决幻读吗
  3. openlayers根据坐标定位_车辆定位技术概述
  4. 洛谷——P1059 [NOIP2006 普及组] 明明的随机数
  5. Unity List的拷贝
  6. 地图距离算法_基于权重的地图匹配技术
  7. 微信退款异步通知解密异常-填充无效,无法被移除
  8. Mysql 时间类型整理
  9. 神经网络开始设计字体,可根据“矢量字体”变换大小写
  10. Python标准库 - subprocess