SSH系列(一)--三者的融合(转)

SSH系列(一)--三者的融合(天下本是分久必合!!)

 
      最近打算把SSH架构好好缕缕(以前断断续续学过和使用过一些),因为现在SSH(Struts+Spring+Hibernate)架构可以说是开发Web项目的一种轻量级的很好的解决方案,也比较成熟了,实际上在这三者(三个开源项目),Struts还是处理前端的运用,Hibernate处理持久化工资,而Spring像个联合剂,它通过其applicationContext.xml配置文件,根据Ioc模式将前两者需要的类实例化并提供给需要的地方(就是提供bean),当然其还可以在配置文件中提供声明性事物处理,可以极大地节约代码(Hibernate可不可以了??)。下面来详细的说明一下:
      我们先看看SS的结合,其结合点在于将StrutsAction的实例生成不再由Struts自己负责,而交于Spring容器去管理,需要修改的地方是首先在Struts的配置文件上用plug-in加上Spring的配置文件applicationContext.xml,然后在在action的配置地方的type属性统统设为org.springframework.web.struts.DelegatingActionProxy,这样Action的具体实现就有Spring去负责了,在Spring的配置文件中把相应的Action设为bean,交由Spring容器去处理。在这个地方有一个要注意的问题,就是为了使Struts的配置文件方便找到Spring的配置文件,我们把applicationContext.xml放在WEB-INF下,而不是放在classpath下面了,这样如果在程序中要显示调用ApplicationContext对象,就不能直接实例化它了,我们可以通过web context来取得它,具体做法是在web.xml中可以加一个Listener或是Servlet的声明(两者取一就可),Web容器会自动加载/WEB-INF/applicationContext.xml初始化ApplicationContext实例,配置完成之后,即可通过WebApplicationContextUtils.getWebApplicationContext
方法在Web应用中获取ApplicationContext引用。
    而对于Spring和Hibernate的结合点在于关于Hibernate的SessionFactory的配置交于了Spring,即我们可以不要hibernate.cfg.xml,而将sessionFactory的配置作为bean来交给Spring的配置文件,当然在这里SessionFactory的Class用org.springframework.orm.hibernate3.LocalSessionFactoryBean,关于数据库的登陆信息可以单独作为一个bean,如dataSource,然后在sessionFactory中引用。Spring对Hibernate提供大量的封装好的类,如HibernateDaoSupport,这样我们在使用是甚至不用先生成SessionFactory,再生成Session等等操作,Spring都提供了封装;还有很重要的一点就是在事物维持上,用Spring的声明性事物会更简单容易些,也更灵活。
    以上简要的分析了以下三者整合的一些结合点和具体的使用方法。
    另外今天在看《深入简出Hibernate》 一书时,对于其前面提到的一些设计模式感觉上还是有不少共鸣的,如DAO模式,它可分成Domain Object和Data Accessor两种模式的结合,Domain Object实际上就是我们在实际项目业务中所提炼出的一些POJO,而对于Data Accessor是对POJO的操作,前者实现了业务数据的对象化封装,后者是实现了数据访问和业务逻辑的分离,都是很好的解耦方法。另外对于Proxy,Decorator,Dynamic Proxy模式也分析的比较好,下次再就它们写些心得(Dynamic Proxy还没理解透!!)。      
posted @ 2013-05-09 09:48  My_World  阅读(202)  评论(0编辑  收藏  举报