Spring(之三)-- Spring整合Struts,Hibernate
来源:互联网 发布:怎么安装python 编辑:程序博客网 时间:2024/06/02 09:10
Spring整合Struts
在web应用中创建Spring容器有如下两种方式:
- 直接在web.xml文件中创建Spring容器
- 利用第三方MVC框架的扩展点,创建Spring容器
对于轻量级的JavaEE应用,工厂模式是更实际的策略,业务逻辑不是EJB,通常是一个POJO,业务逻辑组件的生成通常由工厂负责,而且工厂可以保证该组件的实例只需要一个就够了,可以避免重复实例化造成的系统开销。
下面是采用工厂模式的顺序图
控制器如何访问到容器中的业务逻辑组件呢?为了让Action访问到Spring的业务逻辑组件,有两种策略:
- Spring容器负责管理控制器Action,并利用依赖注入为控制器注入业务逻辑组件
- 利用Spring的自动装配,Action将会自动从Spring容器中获取所需的业务逻辑组件
让Spring管理控制器
在Struts单独使用时,是由struts核心控制器首先拦截到用户请求,然后将请求转发给对应的Action处理,在此过程中,Struts将负责创建Action实例,调用其execute()方法。现在的情形是:如果把action实例交由Spring容器来管理,而不是由Struts产生,现在需要一个插件,来让核心控制器知道调用Spring容器中的Action而不是自行创建的。这个插件是struts-spring-plugin.jar。
Spring插件提供了一种伪Action,在struts.xml文件中配置Action时通常需要制定class属性,该属性就是用于创建Action实例的实现类。但这个插件允许制定class属性时,不在指定Action的实际实现类,而是指定为Spring容器中的BeanId,这样Struts将不再自己负责创建Action。
整合关键:当Struts将请求转发给指定的Action时,Struts中的Action只是一个代号,并没有指定实际的实现类,当然也不可创建Action,而隐藏在该Action下的是Spring容器中的Action实例,它才是真正处理处理请求的控制器。
下面为Spring管理Action的协作图
这种策略的不足之处:
- Spring管理Action,必须将所有的Action配置在Spring中,而struts.xml文件中好需要配置一个伪Action,导致配置文件臃肿。
- Action的业务逻辑组件接受容器注入,将导致代码可读性降低。
使用自动装配
通过设置struts.objectFactory.spring.autoWire常亮可以改变Spring插件的自动装配策略,该常量可接受
- name
- type
- auto
- constuctor
这种策略的不足之处:
- Action接收Spring容器的自动装配,代码的可读性较差
- Action与业务逻辑组件的耦合降低到代码层次,必须在配置文件中配置与Action所需控制器同名的业务逻辑组件,这不利于高层次解耦
总结,整合Spring框架与不整合存在区别,这个区别不在这个配置文件中体现,而是在创建该Action实例时体现出来。如果不整合,则Struts框架负责创建Action实例,创建成功就结束了;如果整合Spring框架,则当Action实例创建完成后,Spring插件还会负责该Action所需的业务逻辑组件注入给该Action实例。
Spring整合Hibernate
DAO模式是一种标准的Java EE设计模式,DAO模式的核心思想是,所有的数据访问都通过DAO组建完成,DAO组件封装了数据库的增、删、改等原子操作。业务逻辑依赖于DAO组件提供的数据库原子操作,完成系统业务逻辑的实现。
JavaEE应用都大致可分为如下三层
- 表现层
- 业务逻辑层
- 数据持久层
轻量级Java EE架构以Spring IOC容器为核心,承上启下:向上管理来自表现层的Action,向下管理业务逻辑层组件,同时负责管理业务逻辑层所需的DAO对象。
下图是轻量级Java EE应用架构
管理Hibernate的SessionFactory
当通过Hibernate进行持久层访问时,必须先获得SessionFactory对象,它是单个数据库映射关系
编译后的内存镜像。在大部分情况下,一个JavaEE应用对应一个数据库,即对应一个SessionFactory。在纯粹的Hibernate访问中,应用程序需要手动创建SessionFactory,这不是一个好的策略。Spring的IoC容器正好提供了这种管理方式,它不仅能以声明式的方式配置SessionFactory实例,也可以充分利用IoC容器的作用,为SessionFactory注入数据源引用。
从用户角度来看,用户发出HTTP请求,当MVC框架的控制器组件拦截到用户请求时,将调用系统的业务逻辑组件,业务逻辑组件则调用系统的DAO组件,而DAO组件则依赖于SessionFactory和DataSource等底层组件实现数据库访问。
从系统实现角度看,IoC容器创建SessionFactory和DataSource等底层组件,然后将这些底层组件注入给DAO组件,提供一个完整的DAO组件,并将此DAO组件注入给业务逻辑组件,从而提供一个完整的业务逻辑组件,而业务逻辑组件又被注入给控制器组件,控制器组件负责拦截用户请求,并将处理结果呈现给用户,这一系列衔接都有Spring 的IoC容器提供实现。
下面是Java EE应用各组件之间的调用关系
- Spring(之三)-- Spring整合Struts,Hibernate
- Struts Spring Hibernate三大框架整合
- 三大框架整合struts+spring+hibernate
- 整合 struts spring hibernate
- struts+spring+hibernate整合
- struts,hibernate,spring整合
- struts+spring+hibernate整合
- struts+spring+hibernate整合
- Struts hibernate Spring 整合
- Struts hibernate Spring 整合
- 整合Spring、Struts、Hibernate
- struts+hibernate+spring整合
- 整合struts spring hibernate
- Struts+Spring+Hibernate整合
- Spring、Struts、Hibernate整合
- struts spring hibernate整合
- Struts+Spring+Hibernate整合
- Struts+Spring+Hibernate整合
- C++异常处理基本思想
- 利用LEX实现词法分析器(vs2010 + Parser Generator版)
- 在Linux下安装运行TeamViewer 9
- EBS系统的应用
- Android 自定义view
- Spring(之三)-- Spring整合Struts,Hibernate
- MySQL详解(18)-----------分页方法总结
- Android 开源项目android-open-project开发工具及测试工具解析 开发效率工具,开发自测相关,测试工具,开发及编译环境,其他
- GRE写作必备句型
- 打开eclipse弹出对话框报错java was started but returned exit code =1
- jquery的ajax和getJson跨域获取json数据
- mac平台执行Yii框架的command类
- 2012年5月SAT香港真题解析
- hdu2851 (dp)