SSH整合(二)——利用Spring来装配Action类

在上篇文章(SSH整合(一)——直接获取ApplicationContext)中,在Action类中通过获取ApplicationContext对象,调用getBean方法来实例化bean类,这种方法将Action类与Spring的绑定装配JavaBean绑定的过紧,大大增加了他们的耦合度。如果装配文件的内容有变化,很可能要修改Action类的代码。

所以我们将装配Action类及其属性的方法也放到Spring中。

一,由Spring创建Action对象

例如,action代码如下:

package net.blogjava.nokiaguy.models;

public class SecondSSHAction {
	private MapService service;
	public void setService(MapService service) {
		this.service = service;
	}
	public String execute(){
		System.out.println(service.validate("lhc"));
		return null;
	}

}

其中MapService是一个业务逻辑Bean。

在Spring中配置这个类装配:

<!-- 装配Action类 -->
<!-- spring默认scope是单例模式,每次创建一个Action对象;每次访问的都是同一个Action,数据不安全;加入scope="prototype"之后,可以保证党有请求的时候,都创建一个Action对象 -->
<bean id="test" class="net.blogjava.nokiaguy.models.SecondSSHAction" scope="prototype">
	<property name="service">
		<ref bean="mapService"/>
	</property>
</bean>

在Struts.xml中配置此Action:

<action name="test" class="test"/>	<!-- 此处class值配置成spring配置文件中对应bean的ID -->
		

优点:

充分利用了Spring的IOC的特性,比较完美的将Action类与ApplicationContext对象进行解耦。

缺点:

这种方法需要同时在Spring的配置文件中和struts.xml文件中配置同一个Action类,这将会造成代码臃肿,难于维护。

二,自动装配Action对象的属性

在这种配置中,我们只需要配置struts.xml文件。

例如:

<!-- 装配此类的时候使用spring配置文件中的mapService来自动装配 -->
<action name="thirdssh" class="net.blogjava.nokiaguy.models.ThirdSSHAction"/>  

当我们在浏览器中访问 http://localhost:8099/SSHDemo02/thirdssh.action 的时候,因为之前我们配置过:

<!-- 装配业务逻辑层组件 -->
<bean id="mapService" class="net.blogjava.nokiaguy.models.MapService">
	<constructor-arg>
		<!--将构造方法的参数MapDAO对象传入业务逻辑层 -->
		<ref bean="mapDAO"/>
	</constructor-arg>
</bean>

在装配ThirdSSHAction的mapService属性的时候,会使用这里的bean来自动装配。

这种方式将配置两个配置文件的方式改为只维护一个配置文件,并且在Spring中配置的组件可以供多个Action使用。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-04 10:27:32

SSH整合(二)——利用Spring来装配Action类的相关文章

SSH整合(二)

SSH框架实现登录.新闻增删改查.树形菜单 项目结构 pom.xml 网不好不要一次引入太多,容易下不全 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.ap

SSH整合(Struts2+Spring+Hibernate)

为了方便本次使用的是Myeclipse8.5 一.创建web工程,搭建Struts框架开发环境: 步骤1::导入struts框架所需的jar包 步骤2:在web.xml中配置struts2.0主过滤器 <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" x

Spring学习(二)Spring Bean装配

Bean的作用域 ========================== bean有五种作用域 scopesingleton : 单例,指一个Bean容器中只存在一份prototype : 每次请求(每次使用)创建新的实例,destroy方式不生效request : 每次http请求创建一个实例且仅在当前request内有效sesson : 同上,每次http请求创建,当前session内有效global session : 基于portlet的web中有效(portlet定义了 global s

ssh整合二之hibernate单独搭建

1.首先我们需要去拷贝我们的hibernate所需的jar包 这里还需要加入我们C3P0的jar包,因为我们hibernate中使用的C3P0连接池 2. 编写我们的关系映射文件Customer.cfg.xml(这里的Customer.cfg.xml和Customer实体类同级)  <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//H

java对象的内存布局(二):利用sun.misc.Unsafe获取类字段的偏移地址和读取字段的值

在上一篇文章中.我们列出了计算java对象大小的几个结论以及jol工具的使用,jol工具的源代码有兴趣的能够去看下.如今我们利用JDK中的sun.misc.Unsafe来计算下字段的偏移地址,一则验证下之前文章中的结论,再则跟jol输出结果对照下.怎样获取sun.misc.Unsafe对象.能够參考这篇文章. public class VO { public int a = 0; public long b = 0; public static String c= "123"; pub

spring的使用-ssh整合

ssh整合-xml方式: 1.需要记住的三个jar包: spring-web-4.2.4.RELEASE.jar           ---保证项目启动时就实例化spring配置的对象(通过一个servletContext监听器ContextLoaderListener实现),保证整个项目只有一个工厂. struts2-spring-plugin-2.3.24.jar ---解决了struts2和spring的整合问题,将struts2中的action交给spring创建 spring-orm-

SSH整合开发时Scope为默认时现象与原理

1.前提知识 1)scope默认值 进行SSH整合开发时,Struts2的action需要用spring容器进行管理,只要涉及到类以bean的形式入到spring容器中,不管是xml配置还是使用注解方式进行配置,都会涉及到spring管理bean的scope,其一共有五种取值,而其默认值为singleton,也就是单例模型,所有对此bean引用为同一个对象. 2)action应为多例 struts2作为MVC中视图(View)层框架,其最主要任务就是接收用户请求,然后调用业务逻辑层进行处理,这种

Cocos2d之Action类详解

一.声明 文章中使用到的cocos2d的源代码的版本是cocos2d-x-3.3rc0. 二.主要内容 [Action类简介] 在cocos2d中,Action类是所有动作的基类.Action类继承了Ref类和Clonable类. [Action类的声明源码] 声明的源码在 CCAction.h 文件中,声明如下: /** @brief Base class for Action objects. */ class CC_DLL Action : public Ref, public Clona

【Struts2+Hibernate3+Spring3】利用SSH整合,完成打印用户表,用户登录、注册、修改密码系统

本文视图尽可能不杂糅其它技术,尽可能少写代码,完成SSH整合.以致于各位在现有网上资料越来越天花龙凤之下,清晰地了解到传说中的三大框架SSH是怎么整合的. 一.SSH的下载 首先SSH的下载就已经是一个难点.SSH三个地方同时推出各自的新技术,已经要求利用Maven完成其版本的同步.毕竟Spring的版本,决定其能整合什么版本的Struts与Hibernate.Spring3.0.5就不能整合Hibernate4.x了.因此本文选取的SSH的版本,分别为struts 2.3.20 GA.Hibe