﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-guangcaiwudong-文章分类-SSH</title><link>http://www.blogjava.net/guangcaiwudong/category/53236.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 18 Jan 2013 13:15:09 GMT</lastBuildDate><pubDate>Fri, 18 Jan 2013 13:15:09 GMT</pubDate><ttl>60</ttl><item><title>spring在ssh框架中的作用</title><link>http://www.blogjava.net/guangcaiwudong/articles/394365.html</link><dc:creator>Kevin_YK</dc:creator><author>Kevin_YK</author><pubDate>Thu, 17 Jan 2013 11:40:00 GMT</pubDate><guid>http://www.blogjava.net/guangcaiwudong/articles/394365.html</guid><wfw:comment>http://www.blogjava.net/guangcaiwudong/comments/394365.html</wfw:comment><comments>http://www.blogjava.net/guangcaiwudong/articles/394365.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/guangcaiwudong/comments/commentRss/394365.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/guangcaiwudong/services/trackbacks/394365.html</trackback:ping><description><![CDATA[<div>在SSH框假中spring充当了管理容器的角色。我们都知道Hibernate用来做持久层，因为它<br />将JDBC做了一个良好的封装，程序员在与数据库进行交互时可以不用书写大量的SQL语<br />句。Struts是用来做应用层的，他它负责调用业务逻辑serivce层。所以SSH框架的流程大<br />致是：Jsp页面----Struts------Service（业务逻辑处理类）---Hibernate（左到右）&nbsp; &nbsp;<br />&nbsp; struts负责控制Service（业务逻辑处理类），从而控制了Service的生命周期，这样层与层<br />之间的依赖很强，属于耦合。这时，使用spring框架就起到了控制Action对象（Strus中的）<br />和Service类的作用，两者之间的关系就松散了，Spring的Ioc机制（控制反转和依赖注入）<br />正是用在此处。&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp; Spring的Ioc（控制反转和依赖注入）&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp; 控制反转：就是由容器控制程序之间的（依赖）关系，而非传统实现中，由程序代码<br />直接操控&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp; 依赖注入：组件之间的依赖关系由容器在运行期决定&nbsp; ，由容器动态的将某种依赖关系<br />注入到组件之中 &nbsp;<br />使用Spring的第二个好处（AOP应用）：&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp; 事务的处理：&nbsp; &nbsp;<br />&nbsp;&nbsp; 在以往的JDBCTemplate 中事务提交成功，异常处理都是通过Try/Catch 来完成，而在<br />Spring中。Spring容器集成了TransactionTemplate，她封装了所有对事务处理的功能，包括<br />异常时事务回滚，操作成功时数据提交等复杂业务功能。这都是由Spring 容器来管理，大<br />大减少了程序员的代码量，也对事务有了很好的管理控制。Hibernate中也有对事务的管理，<br />hibernate 中事务管理是通过SessionFactory 创建和维护Session 来完成。而Spring 对<br />SessionFactory配置也进行了整合，不需要在通过hibernate.cfg.xml来对SessionaFactory进行<br />设定。这样的话就可以很好的利用Sping对事务管理强大功能。避免了每次对数据操作都要<br />现获得Session实例来启动事务/提交/回滚事务还有繁琐的Try/Catch操作。这些也就是Spring<br />中的AOP（面向切面编程）机制很好的应用。一方面使开发业务逻辑更清晰、专业分工更<br />加容易进行。另一方面就是应用Spirng&nbsp;&nbsp;&nbsp; AOP隔离降低了程序的耦合性使我们可以在不同<br />的应用中将各个切面结合起来使用大大提高了代码重用度<br /><br /><br /><br />任何语言、框架的发展都是为了降低程序之间的依赖性和耦合性，使重用性达到最高，在我们平时的四层框架中，界面层page、action层、业务逻辑层service、数据访问层dao，虽然分层明确，代码清晰，但是层与层之间有着很高的依赖性，比如service层处理业务逻辑构造sql语句时需要引用dao层的对象，调用dao层的方法执行sql语句，而action层处理界面动作的时候又要引用service层的对象，调用service层的方法，这样一来实例action对象的时候要同时实例至少一个service对象和一个dao对象，这样依赖性太强，因此我们把他们做成接口，只在类里写各层的引用，而不对引用进行实例化，用spring的ioc依赖注入，在spring容器启动时来实例化引用，降低了程序的依赖性，如果某个业务逻辑发生变化，可以重新写一个新的业务逻辑实现类，修改spring的配置文件即可，不用每个action代码中去改new的对象，这就是依赖注入。<br />而我们通常说一个方法只做一件事情，但是实际是实现不了的，因为一个方法除了做业务逻辑处理外还要至少处理事务、日志等事情，这些东西没有办法脱离，因此spring的aop面向切面，就将事务和日志可以定义成切面，配置的配置文件中，在你需要的时候切入进来，代码中缺很清晰没有事务和日志，这就是spring的aop。<br /></div><img src ="http://www.blogjava.net/guangcaiwudong/aggbug/394365.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/guangcaiwudong/" target="_blank">Kevin_YK</a> 2013-01-17 19:40 <a href="http://www.blogjava.net/guangcaiwudong/articles/394365.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>