`
y806839048
  • 浏览: 1118111 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

struts和spring的上下文结合的地方(上下文结合)

阅读更多

 

struts再一次包装了spring的webapplicationcontext(webapplication本源都是从servletcontext获取)

servletcontext这里有配置文件的参数等信息,还有bean之间的关联关系,并且把这种关联关系封装成map

 

核心结合jar包

 

struts2-spring-plugin-2.1.6.jar

 

struts-plugin.xml:

 

<bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />

 

 <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>   

 

这个拦截器包装了action的context和webapplicationcontext

 

(一)

 

struts中注入webaoolicationcontext

 

StrutsSpringObjectFactory  实现了implements ApplicationContextAware

 

@Inject静态注入

 

从servletcontext获取webapplicationcontext

 

 

 

@Inject

    public StrutsSpringObjectFactory(

            @Inject(value=StrutsConstants.STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE,required=false) String autoWire,

            @Inject(value=StrutsConstants.STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE_ALWAYS_RESPECT,required=false) String alwaysAutoWire,

            @Inject(value=StrutsConstants.STRUTS_OBJECTFACTORY_SPRING_USE_CLASS_CACHE,required=false) String useClassCacheStr,

            @Inject ServletContext servletContext) {

          

        super();

        boolean useClassCache = "true".equals(useClassCacheStr);

        LOG.info("Initializing Struts-Spring integration...");

 

        ApplicationContext appContext = (ApplicationContext) servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);

        if (appContext == null) {

            // uh oh! looks like the lifecycle listener wasn't installed. Let's inform the user

            String message = "********** FATAL ERROR STARTING UP STRUTS-SPRING INTEGRATION **********\n" +

                    "Looks like the Spring listener was not configured for your web app! \n" +

                    "Nothing will work until WebApplicationContextUtils returns a valid ApplicationContext.\n" +

                    "You might need to add the following to web.xml: \n" +

                    "    <listener>\n" +

                    "        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>\n" +

                    "    </listener>";

            LOG.fatal(message);

            return;

        }

 

        this.setApplicationContext(appContext);

 

        int type = AutowireCapableBeanFactory.AUTOWIRE_BY_NAME;   // default

        if ("name".equals(autoWire)) {

            type = AutowireCapableBeanFactory.AUTOWIRE_BY_NAME;

        } else if ("type".equals(autoWire)) {

            type = AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE;

        } else if ("auto".equals(autoWire)) {

            type = AutowireCapableBeanFactory.AUTOWIRE_AUTODETECT;

        } else if ("constructor".equals(autoWire)) {

            type = AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR;

        }

        this.setAutowireStrategy(type);

 

        this.setUseClassCache(useClassCache);

 

        this.setAlwaysRespectAutowireStrategy("true".equalsIgnoreCase(alwaysAutoWire));

 

        LOG.info("... initialized Struts-Spring integration successfully");

    }

 

 

 

 

 

 

 

(二)

 

拦截器中(使用webapplicationcontext):

 利用spring的context封装成struts自己的context

 

ActionAutowiringInterceptor (StrutsSpringObjectFactory中@Inject静态注入了webapplicationcontext)

 

 

  public String intercept(ActionInvocation invocation)

    throws Exception

  {

    if (!this.initialized)

    {

      ApplicationContext applicationContext = (ApplicationContext)ActionContext.getContext().getApplication().get(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);

      if (applicationContext == null)

      {

        if (LOG.isWarnEnabled()) {

          LOG.warn("ApplicationContext could not be found.  Action classes will not be autowired.", new String[0]);

        }

      }

      else

      {

        setApplicationContext(applicationContext);

        this.factory = new SpringObjectFactory();

        this.factory.setApplicationContext(getApplicationContext());

        if (this.autowireStrategy != null) {

          this.factory.setAutowireStrategy(this.autowireStrategy.intValue());

        }

      }

      this.initialized = true;

    }

    if (this.factory != null)

    {

      Object bean = invocation.getAction();

      this.factory.autoWireBean(bean);

      

      ActionContext.getContext().put("com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor.applicationContext", this.context);

    }

    return invocation.invoke();

  }

 

分享到:
评论

相关推荐

    struts+spring+hibernate三大框架整合

    1. **使用Spring的ActionSupport**:Action类直接继承自Spring的ActionSupport,通过`super.getWebApplicationContext()`获取Spring上下文,然后通过`ApplicationContext.getBean()`获取bean。这种方式简单,但...

    整合struts+spring+hibernate实例

    同时,配置Spring的ApplicationContext,使Struts和Spring能共享同一个上下文。 4. **配置Hibernate**:创建Hibernate的配置文件(hibernate.cfg.xml),定义实体类和映射文件,然后在Spring配置文件中定义...

    struts2和spring和Hibernate整合的jar包

    2. **配置Spring**:引入Spring的JAR包,包括Spring的核心、AOP、上下文、ORM等模块。在applicationContext.xml中配置bean,包括DAO、Service层组件,以及数据源、事务管理器等。 3. **配置Hibernate**:添加...

    struts+spring+hibernate

    在SSH中,Spring主要负责整个应用的上下文管理,包括对Struts和Hibernate的集成。 Hibernate 是一个对象关系映射(ORM)框架,它简化了数据库操作,将Java对象与数据库表进行映射,通过对象模型处理数据。开发者...

    struts+spring集成

    2. **Spring作为Struts2的Action上下文**:在Struts2中,Action是处理请求的核心组件。通过Spring管理Action,我们可以利用Spring容器初始化Action,这样Action的实例化和依赖关系的建立都由Spring负责。 3. **配置...

    Struts+Spring+Hibernate练习(完整源码)

    Spring框架则提供了更广泛的上下文管理和依赖注入功能。它可以管理Bean的生命周期,允许开发者通过接口编程而不是硬编码实现类。Spring的AOP(面向切面编程)允许在不修改代码的情况下插入日志、事务管理等关注点。...

    Spring整合Struts

    这种方式允许你集中管理所有的Spring上下文文件,对于使用如StrutsTestCase这样的测试工具尤其有用。因为StrutsTestCase的MockStrutsTestCase不会在启动时初始化监听器,所以将所有上下文文件放置在插件中是一种变通...

    Struts Spring Hibernate整合实践

    - 在 Struts 的配置文件 `struts-config.xml` 中,我们需要配置 Struts 插件来加载 Spring 上下文。 - 将 Struts 的 Action 映射配置改为使用 Spring 管理的 Bean,通常会配置一个 `&lt;action&gt;` 节点,指定对应的 ...

    Struts和Spring的整合

    3. **配置FilterDispatcher**:在web.xml中,配置Struts的`FilterDispatcher`,并添加Spring的`ContextLoaderListener`监听器,以便在应用启动时加载Spring上下文。 4. **处理Action与Service的交互**:在Action类...

    Java struts+spring工程范例

    - 使用Spring的WebApplicationContextLoaderListener监听器启动Spring上下文。 - 在struts-config.xml中配置ActionForm,指定其对应的Spring Bean ID。 - 通过Spring提供的ActionServletWrapper或...

    struts加载spring的方法

    2. **配置Spring监听器**:在`web.xml`文件中,需要配置一个Spring的上下文监听器`ContextLoaderListener`,该监听器负责初始化Spring的ApplicationContext。具体配置如下所示: ```xml &lt;listener-class&gt;org....

    hibernate struts 和spring整和配置

    1. **配置Spring**:首先,你需要在`web.xml`中添加`ContextLoaderListener`监听器,用于启动Spring上下文。在`context-param`标签中指定Spring配置文件的位置,例如`applicationContext.xml`。 ```xml ...

    Struts+Spring+Hibernate开发实例.pdf

    标题和描述中指出的文档《Struts+Spring+Hibernate开发实例.pdf》包含了关于这三个流行的Java开源框架结合使用的示例代码和相关知识点。Struts负责视图与控制器部分,Spring负责业务逻辑层及依赖注入,Hibernate负责...

    struts+spring+ibatis框架集成.pdf

    将Spring的jar包(如spring.jar)放入项目的WEB-INF/lib目录,并在web.xml中配置Spring的上下文参数,例如指定log4j配置文件的位置。 iBatis是一个持久层框架,它简化了SQL操作,允许开发者直接编写SQL语句并与Java...

    Struts Spring Hibernate整合实践.doc

    例如,Struts的`ActionServlet`配置,Spring的`ContextLoaderListener`用于初始化Spring应用上下文,以及Hibernate的`ContextLoaderListener`用于初始化Hibernate SessionFactory。 在应用逻辑层面,用户登录和注册...

    Struts整合Spring步骤

    - **配置Spring监听器**:在`web.xml`中添加Spring的ContextLoaderListener,以便启动时加载Spring上下文。 - **使用Struts 2 Spring插件**:添加`struts2-spring-plugin-2.0.12.jar`,这样Struts 2可以自动识别和...

    ssh框架优缺点 struts hibernate spring

    4. **依赖Servlet容器**:Struts中的Action类依赖于Servlet容器提供的上下文环境,这在一定程度上限制了它的可移植性。 5. **线程安全问题**:默认情况下,Struts的Action是线程不安全的,这可能引发并发访问时的...

    整合Struts+Spring+Hibernate简单例子开发

    4. **整合步骤**: 在web.xml中配置Spring的ContextLoaderListener和Struts的ActionServlet,确保在Web应用启动时加载Spring上下文,并在处理请求时使用Struts的控制器。 5. **测试应用**: 创建JSP页面作为视图,...

Global site tag (gtag.js) - Google Analytics