在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隔离降低了程序的耦合性使我们可以在不同的应用中将各个切面结合起来使用大大提高了代码重用度。

---------------------------------------------------------------------------------------------------------------------------------

spring可以将struts和hibernate纳入自己的管理。
例如,struts要调用service层的 UserService.Java 的方法,不用spring的话,就要先new 一个UserService,才能调用其中的方法。而用spring则可以把UserService作为一个Struts Action 的属性,由spring去实例化,这样实例化对象的任务就交给了spring。
用Spring可以简化存储对象时的代码,DAO层的代码继承HibernateDaoSupport,用getHibernateTemplate()方法可以简单进行增删查改。
简言之,就是降低耦合。
另外,spring可以对事物进行管理(AOP),配置一些传播特性之类的....

spring
是用来联通struts(struts2)和hibernate的,这就是spring的IOC容器的作用,就是把action需要的资源注入,管理struts和hibernate,hibernate的session的创建和事务的管理都交给了spring了。

1.在这里,spring可以理解成struts和hibernate的粘合剂。
2.struts+hibernate 简称sh
  struts+hibernate+spring 简称ssh

sh与ssh框架其实并无区别。
spring的作用是指导形成一种良好的编程习惯,推荐面向接口方式进行编程,即开发任务组件,包括数据持久层,业务层等,都用接口方式实现
并且自定义工厂模式来管理这些组件。
另外,把项目中的事务,日志等也统一来管理。
spring是这些功能的开源汇总而已
sh编程时,不需要将struts的action交给spring代理
ssh编程时,需要将struts的action交给spring代理
          (在applicationContext.xml中配置)

理解IOC 和 AOP

都是为了 低耦合 高内聚的目标

最新文章

  1. .NET面试基础知识
  2. QTableWidget控件总结<一>
  3. js 小工具-- 原生 js 去除空格
  4. mmap直接控制底层【转】
  5. C++@命名空间(转)
  6. 使用javaScript解决asp.net中mvc使用ajax提交数组参数的匹配问题
  7. (转)JavaScript 中对变量和函数声明的“提前(hoist)”
  8. [转]NHibernate之旅(5):探索Insert, Update, Delete操作
  9. [TopCoder] SRM_594_DIV2.250
  10. 下载安装tomcat6.0
  11. cannot create windows service for mysql
  12. 多文档界面的实现(DotNetBar的superTabControl)
  13. docker学习篇(一) ----入门篇
  14. postgresql----条件表达式
  15. Linux下怎么创建和进入带有空格的文件夹
  16. NodeMCU学习(一) : 开始之前的准备
  17. [2018HN省队集训D1T1] Tree
  18. R语言学习笔记—K近邻算法
  19. linux驱动杂项
  20. centos 使用windows7 存储

热门文章

  1. Hive入门操作
  2. [零基础学JAVA]Java SE面向对象部分.面向对象基础(01)
  3. AWK入门指南
  4. Java虚拟机2:Java内存区域
  5. docker-3-常用命令(中)
  6. 开源项目之kisso
  7. redis安装和简介(2)
  8. [转]MFC子线程中更新控件内容的两种办法
  9. java连接数据库增删改查公共方法
  10. requireJS使用教程