`

SSH学习记录(3)-加入Spring

阅读更多
Struts2与Spring 的集成要用到Spring插件包,这个包是同Struts2一起发布的。

Spring插件是通过覆盖(override)Struts2的 ObjectFactory来增强核心框架对象的创建。

当创建一个对象的时候,它会用Struts2配置文件中的class属性去和Spring配置文件中的id属性进行关联,

如果能找到则由Spring创建,否则由Struts2框架自身创建,然后由Spring来装配。

Spring插件具体有如下几个作用:



1. 允许spring来创建Action、Interceptror和Result



2. 由Struts创建的对象能够被Spring装配



3. 提供了2个拦截器来自动装配action,如果没有使用Spring ObjectFactory的话



这里要注意的是,我们不必在Spring中去注册action,尽管我们可以这么去做,通常Struts框架会自动的从action mapping中创建action对象。

1. 整合Spring,加入struts2-spring-plugin-xxx.jar包。

   有的教程说要在在struts.properties中设置struts.objectFactory属性值

   struts.objectFactory = spring

   其实struts2-spring-plugin-2.0.8.jar

   这个插件包中有个struts-plugin.xml文件,它的内容如下:

  
<struts>

    <bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" 

         class="org.apache.struts2.spring.StrutsSpringObjectFactory" />

    <constant name="struts.objectFactory" value="spring" />



    <package name="spring-default">

        <interceptors>

            <interceptor name="autowiring" 

				class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>

            <interceptor name="sessionAutowiring"

				class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"/>

        </interceptors>

    </package>    

</struts>


   这里它将框架常量struts.objectFactory覆盖了,设置为 ”spring”,

   其实这里是使用了缩写,我们可以写全称:

   org.apache.struts2.spring.StrutsSpringObjectFactory。

   这个缩写的”spring”是和 bean配置中的name属性相对应的。

   默认情况下所有由框架创建的对象都是由ObjectFactory实例化的,

   ObjectFactory提供了与其它IoC容器如Spring、Pico等集成的方法。

   覆盖这个ObjectFactory的类必须继承ObjectFactory类或者它的任何子类,

   并且要带有一个不带参数的构造方法。

   在这里我们用 org.apache.struts2.spring.StrutsSpringObjectFactory

   代替了默认的ObjectFactory。

2. 配置Spring监听器,将Spring.jar包包含到应用中 。

 
<?xml version="1.0" encoding="UTF-8"?>

<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

	<!-- 

		以前的

		.

		.

		. 

	-->

    <!-- 新加入listener -->

    <listener>

    	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

	</listener> 

</web-app>


3. 在applicationContext.xml中注册Bean

 
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC 

    "-//SPRING//DTD BEAN//EN"

    "http://www.springframework.org/dtd/spring-beans.dtd">

<beans default-autowire="byName">

    <bean id="aopAction" class="com.zhch.action.AOPAction"/>

</beans>


4. 在struts.xml中就可以引用applicationContext.xml中注册的Bean,默认用name,也就是applicationContext.xml中的id。

<!DOCTYPE struts PUBLIC

        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

        "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <include file="struts-default.xml"/>

    <package name="Struts2_IoC" extends="struts-default">

        <action name="Login" class="com.zhch.LoginAction">

            <result name="error">/error.jsp</result>

            <result name="success">/welcom.jsp</result>

        </action>

        

        <!-- action 的class 改为 applicationContext 是Bean的id -->

        <action name="aopAction" class="aopAction">

        	<result name="input">/AOPresult.jsp</result>

            <result name="error">/error.jsp</result>

            <result name="success">/AOPresult.jsp</result>

        </action>

    </package>

</struts>


5. 在applicationContext.xml中配置Action的Logic,Java文件中的new 去掉,加入get,set方法。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC 

    "-//SPRING//DTD BEAN//EN"

    "http://www.springframework.org/dtd/spring-beans.dtd">

<beans default-autowire="byName">

    <bean id="aopAction" class="com.zhch.action.AOPAction">

    	<property name="logic" ref="aopLogic"/>

    </bean>

    <bean id="aopLogic" class="com.zhch.logic.AOPLogicImpl"/>

</beans>


package com.zhch.action;



import com.opensymphony.xwork2.ActionSupport;

import com.zhch.logic.AOPLogicImpl;



public class AOPAction extends ActionSupport {

	/** serialVersionUID */

	private static final long serialVersionUID = 1L;

	private AOPLogicImpl logic;

	private String word;



	public String execute(){

		//logic 注释掉

		//logic=new AOPLogicImpl();

		word=logic.getWord();

		return SUCCESS;

	}

	/**

	 * @param logic the logic to set

	 */

	public void setLogic(AOPLogicImpl logic) {

		this.logic = logic;

	}

	/**

	 * 其它的

	 * .

	 * .

	 * .

	 */

}


6. 运行页面还跟之前一样,则成功。





总结步骤:

1.加入struts2-spring-plugin-xxx.jar包。

2.配置监听器。

3.注册Bean,Struts中引用。

4.修改对应的类,使用IOC的注入。完成。



附加1: Spring AOP的两个例子




介绍AOP联盟项目的文档 http://www.blogjava.net/joseph/archive/2007/12/19/168630.html

Spring AOP 概览与细节 http://www.iteye.com/topic/109075

Spring AOP 学习小结 http://www.iteye.com/topic/39899

Spring AOP  http://www.iteye.com/topic/41821

利用spring AOP管理权限[简单实例] http://www.iteye.com/topic/42673

关于配置文件:

service中配置了接口,实现类和过滤器,过滤器包装实现类中继承接口的方法。

testResult则使用了service代理产生的Bean。



附加2:struts2相关



深入Struts2的配置文件 http://www.java3z.com/cwbwebhome/article/article2/2938.html?id=1631



附加3: Java动态代理



 主要内容4个

 1.一个接口 2. 一个接口的实现类  都很普通

 3.一个实现InvocationHandler接口的动态类,覆盖invoke方法实现方法前后的插入。

 4.用Proxy.newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h)

   方法得到被动态代理的接口,调用被代理的方法。

 代码如下:

Subject  RealSubject  DynamicSubject  Client

Subject.java
package com.zhch.proxystudy;



public interface Subject {

	 void request(String a,String b);

}

RealSubject.java
package com.zhch.proxystudy;



public class RealSubject implements Subject {



	@Override

	public void request(String a,String b) {

		System.out.println("I get "+a);

		System.out.println("I get "+b);

		System.out.println("Here are a: "+a+", b: "+b);

	}



}

DynamicSubject.java
package com.zhch.proxystudy;



import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Method;



public class DynamicSubject implements InvocationHandler {



	private   Object sub;

	public  DynamicSubject()  {}

	public  DynamicSubject(Object obj)  {

	    sub  =  obj;

	}



	public  Object invoke(Object proxy, Method method, Object[] args)  throws  Throwable  {

		System.out.println( "before calling  "   +  method);

		

		method.invoke(sub,args);

		

		System.out.println( "after calling  "   +  method);

		return   null ;

	} 

}

Client.java
package com.zhch.proxystudy;



import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Proxy;



public class Client {



	public static void main(String[] args) {

		RealSubject rs = new RealSubject();// 在这里指定被代理类

		InvocationHandler ds = new DynamicSubject(rs);

		Class cls = rs.getClass();



		// 以下是一次性生成代理

		Subject subject = (Subject) Proxy.newProxyInstance(

				cls.getClassLoader(), cls.getInterfaces(), ds);

		subject.request("LQ","ZC");

	}

}
分享到:
评论

相关推荐

    ssh三大框架jar包

    整合SSH框架时,开发者需要配置相应的XML文件,如struts.xml、spring-context.xml和hibernate.cfg.xml,以定义各个框架的配置。此外,还需确保这些jar包已加入到项目的类路径中,以便正确地运行和编译应用程序。 总...

    SSH整合笔记

    ### SSH整合笔记 #### 一、三大框架整合 在企业级应用开发中,Spring、Struts2 和 Hibernate 组合起来被广泛称为 SSH 框架。这些框架各自解决了不同的问题,但组合在一起可以提供一个非常强大的解决方案。下面将...

    SSH整合 struts+hibernate+spring

    ### SSH整合 struts+hibernate+spring #### 一、SSH整合概述 在软件开发领域,特别是Java Web开发中,Struts、Spring 和 Hibernate 被广泛地应用于构建复杂的应用程序。这三大框架各有所长,分别在不同的层面发挥...

    SSH笔记-事务管理

    在IT行业中,SSH(Spring、Struts、Hibernate)是一个经典的Java Web开发框架组合,而这里的“SSH笔记-事务管理”主要关注的是Spring框架中的事务管理部分。Spring以其强大的依赖注入和面向切面编程能力,提供了灵活...

    SSH整合笔记和配置文

    ### SSH整合笔记和配置文件解析 #### SSH框架简介 SSH指的是Struts2、Spring以及Hibernate三个开源框架的集成应用,它们分别是MVC框架、轻量级IoC容器和ORM持久层框架。在实际项目开发中,这三个框架经常被一起使用...

    SSH笔记-Mapping

    SSH(Struts2 + Spring + Hibernate)是Java开发中常用的一种Web应用开发框架组合,它结合了Struts的MVC设计模式、Spring的依赖注入和事务管理以及Hibernate的对象关系映射能力。本笔记主要探讨SSH中的映射关系,...

    ssh 学习笔记

    SSH(Struts2、Hibernate、Spring)学习笔记详细涵盖了SSH三大框架的学习经验和常见问题解决方案。SSH三大框架在Java Web开发中被广泛使用,它们相互配合,各司其职,能够帮助开发者构建稳定高效的系统。 Struts2是...

    SSH笔记-annotation配置注入关系1

    在本文中,我们将深入探讨SSH笔记中的一个关键概念——基于注解的配置注入关系,特别是在Spring框架4.x版本中的应用。SSH(Struts、Spring、Hibernate)是Java Web开发中的经典组合,而Spring框架以其强大的依赖注入...

    SSH2整合-精简版(带表格分页

    这个"SSH2整合-精简版(带表格分页)"着重于在项目中实现轻量级的整合,并且加入了表格数据的分页功能。下面将详细介绍这三个框架以及分页技术的应用。 首先,Struts2是MVC(Model-View-Controller)设计模式的一种...

    spring框架案例学习文档笔记

    ### Spring框架案例学习文档笔记知识点总结 #### 第一课:面向抽象编程 - **核心概念**:面向抽象编程强调的是程序设计中通过抽象接口来进行设计和实现的方式,它避免了直接依赖具体实现类,增强了系统的灵活性和可...

    spring2.5 学习笔记

    ### Spring 2.5 学习笔记知识点梳理 #### 第一课:面向抽象编程 - **定义**:面向抽象编程是一种编程范式,强调通过抽象类或接口来设计程序结构,减少对具体实现的依赖。 - **优势**: - 提高了系统的可维护性与...

    在线聊天系统ssh整合开发struts spring hibernate

    通过分析和理解这些文件,开发者可以深入学习如何将SSH框架和Ajax技术有效结合,以实现一个高性能的在线聊天系统。这样的实践有助于提升开发者在Java Web开发领域的技能,对今后的项目开发有着极大的指导意义。

    ssh最新框架搭建,加入拦截器

    SSH框架,全称为Spring、Struts2和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个框架集合提供了模型-视图-控制器(MVC)架构模式,使得开发者可以更高效、灵活地构建可维护性强的企业级应用。在这...

    一个ssh项目的开发笔记

    - **修改struts.xml文件:** 将Action的类路径改为Bean名称,并将Action加入Spring容器。 - **验证:** 确保页面跳转正常,表示Struts与Spring整合成功。 **(2) Hibernate与Spring整合:** - **管理SessionFactory...

    ssh基本jar包

    2. Spring的核心库,如spring-context.jar、spring-beans.jar,提供了IoC和AOP的功能。 3. Hibernate的核心库,如hibernate-core.jar,包含ORM的主要实现。 4. 数据库驱动,如mysql-connector-java.jar,用于连接...

    开发Spring+Struts+Hibernate应用

    - 添加Spring功能:在应用中加入Spring框架的核心功能,如依赖注入。 - Spring配置文件:定义beans,配置业务层、数据访问层等组件。 - 依赖注入:利用Spring的IoC容器管理对象的创建和依赖关系。 #### 6. Spring+...

Global site tag (gtag.js) - Google Analytics