博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
struct spring hibernate辨析
阅读量:4030 次
发布时间:2019-05-24

本文共 1719 字,大约阅读时间需要 5 分钟。

struct spring hibernate辨析
    现在开发流行MVC模式,structs在C(控制器)中使用;hibernate在M(模型)中被使用;至于 spring ,最大的作用在于,structs、hibernate的对象,由于在各个层之间相互调用,自己维护不够效率、会产生疏漏,所以,spring 提供一个容器(IOC),structs、hibernate的对象交由spring管理即可。
    
另外,spring还有一个作用,AOP是切面编程,就是不同地方的相同代码,spring提取出来,进行统一的使用。
    
总之,spring就是把开发中共性的问题,抽取出来,统一的调用。
Spring,说的通俗一点,或用的多的,就是对象管理器。有需要用对象的地方,直接向Spring去要就可以了,不用New一个出来。
    MVC中的V(视图),可以用JSP、structs、ExtJs、JQuery等框架或技术实现。
    在SSH框假中spring充当了管理容器的角色。我们都知道Hibernate用来做持久层,因为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不用书写大量的SQL语句。Struts是用来做应用层的,他它负责调用业务逻辑serivce层。所以SSH框架的流程大致是:Jsp页面----Struts------Service(业务逻辑处理类)---Hibernate(左到右)。
·······································
    structs注重表现层与业务逻辑的分离
    hibernate是一个简单好用的O/R持久化工具
    spring框架使得逻辑代码可以像插件一样随便加减,也使得系统的可配置性和扩展性增强,同时使得可以直接对业务层进行测试
    struts一个优秀的MVC实现,轻量级的框架
·······································
    
Spring的Ioc(控制反转和依赖注入)
    控制反转:就是由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直接操控
    依赖注入:组件之间的依赖关系由容器在运行期决定 ,由容器动态的将某种依赖关系注入到组件之中 。
   从上面我们不难看出:从头到尾Action仅仅是充当了Service的控制工具,这些具体的业务方法是怎样实现的,他根本就不会管,也不会问,他只要知道这些业务实现类所提供的方法接口就可以了。而在以往单独使用Struts框架的时候,所有的业务方法类的生命周期,甚至是一些业务流程都是由Action来控制的。层与层之间耦合性太紧密了,既降低了数据访问的效率又使业务逻辑看起来很复杂,代码量也很多。,Spring容器控制所有Action对象和业务逻辑类的生命周期,由与上层不再控制下层的生命周期,层与层之间实现了完全脱耦,使程序运行起来效率更高,维护起来也方便。
   事务的处理:
在以往的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隔离降低了程序的耦合性使我们可以在不同的应用中将各个切面结合起来使用大大提高了代码重用度

转载地址:http://dhqbi.baihongyu.com/

你可能感兴趣的文章
Maven跳过单元测试的两种方式
查看>>
通过C++反射实现C++与任意脚本(lua、js等)的交互(二)
查看>>
利用清华镜像站解决pip超时问题
查看>>
[leetcode BY python]1两数之和
查看>>
微信小程序开发全线记录
查看>>
Centos import torchvision 出现 No module named ‘_lzma‘
查看>>
Maximum Subsequence Sum
查看>>
PTA:一元多项式的加乘运算
查看>>
CCF 分蛋糕
查看>>
解决python2.7中UnicodeEncodeError
查看>>
小谈python 输出
查看>>
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
查看>>
python:如何将excel文件转化成CSV格式
查看>>
Django 的Error: [Errno 10013]错误
查看>>
机器学习实战之决策树(一)
查看>>
[LeetCode By Python] 2 Add Two Number
查看>>
python 中的 if __name__=='__main__' 作用
查看>>
机器学习实战之决策树二
查看>>
[LeetCode By Python]7 Reverse Integer
查看>>
[LeetCode By Python]9. Palindrome Number
查看>>