SSH系列(一)--三者的融合(天下本是分久必合!!)
来源:互联网 发布:大数据全栈运维工程师 编辑:程序博客网 时间:2024/05/17 00:08
最近打算把SSH架构好好缕缕(以前断断续续学过和使用过一些),因为现在SSH(Struts+Spring+Hibernate)架构可以说是开发Web项目的一种轻量级的很好的解决方案,也比较成熟了,实际上在这三者(三个开源项目),Struts还是处理前端的运用,Hibernate处理持久化工资,而Spring像个联合剂,它通过其applicationContext.xml配置文件,根据Ioc模式将前两者需要的类实例化并提供给需要的地方(就是提供bean),当然其还可以在配置文件中提供声明性事物处理,可以极大地节约代码(Hibernate可不可以了??)。下面来详细的说明一下:
我们先看看SS的结合,其结合点在于将Struts中Action的实例生成不再由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引用。
方法在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还没理解透!!)。
- SSH系列(一)--三者的融合(天下本是分久必合!!)
- SSH系列(一)--三者的融合(天下本是分久必合!!)
- SSH --三者的融合
- Guava(五)合久必分, 分久必合
- SSH答疑解惑系列(一)——spring容器是如何启动的
- 三网融合的核心是互联网
- 推荐几本电子书系列(一)
- SSH系列(三)--Hibernate进阶
- SSH系列(三)--Hibernate进阶
- 图像融合(一)--概述
- 图像融合(一)--概述
- SSH系列(一)struts入门
- “云”领天下(一): 最近的云计算IaaS
- 基于FPGA的图像处理(三)--图像融合
- React Native探索(三):与 react-web 的融合
- React Native探索(三):与 react-web 的融合
- 基于区块链的融合通信初探(三)
- 【SSH】(一)三大框架整合
- EJB事务处理
- 专注于你自己
- MicroSoft Live 和GOOGLE个性主页 页面元素可拖拽放置的实现原理(2)
- Direct in class
- 关于J2EE下的web项目的架构问题方面的思考
- SSH系列(一)--三者的融合(天下本是分久必合!!)
- 《程序员》&《科幻世界》携手“软件之梦”征文
- 防止表格撑破
- 第6回 软件测试的十大原则
- 一个asp小偷通用类
- 用什么写代码?
- 偶感——自我世界•现实•世俗
- 实习--宏景讲座
- 通过Web Services上传和下载文件