zoukankan      html  css  js  c++  java
  • 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还没理解透!!)。      
  • 相关阅读:
    中文知识图谱-基于规则的关系抽取-领域词抽取
    数据挖掘trick 特征编码
    何构建强大的baseline?万能的4种标注框架供你选择!
    工业界如何解决NER问题?12个trick,与你分享~
    开源的模式匹配工具-基于AC自动机的pyahocorasick、Acora、esmre
    Pooling 选择的策略
    自然语言处理-条件随机场CRF全链路解读
    python DES 加密
    怎么解决 ? null, message from server: "Host '***.***.***.***' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'"
    Flutter混合开发 怎么开启热更新?
  • 原文地址:https://www.cnblogs.com/yigerendehaibian/p/2821856.html
Copyright © 2011-2022 走看看