`
胡小米
  • 浏览: 77333 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts2与Spring集成中的自动装配策略

阅读更多
1.    与自动装配有关的配置

【org.apache.struts2.StrutsConstants类】

Ø // Spring应该如何装配。有效值:’name’, ’type’, ’auto’ 和’construtctor’。

STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE

Ø // 由STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE选择的自动装配策略是否总是受重视的。默认是false,遗留行为即试图根据情况决定最好的策略。设置为true表示使用STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE设置的自动装配策略。

STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE_ALWAYS_RESPECT

Ø 3(// Spring是否使用它的类缓存

STRUTS_OBJECTFACTORY_SPRING_USE_CLASS_CACHE

2.    自动装配原理

首先根据在Struts.xml中定义Action时指定的class属性值获取Action实例

即appContext.getBean(beanName)

n 如果获取到,则直接返回。此时所使用的自动装配策略是applicationContext.xml中设置的装配策略。

applicationContext.xml中beans的默认自动装配策略是no,所以如果没有设置<beansdefault-autowire="autodetect">或者bean的autowire="byName",则Action中的属性比如personManager不会进行自动装配。

n 如果获取不到,则调用buildBean(beanClazz, extraContext)。

u 如果struts.objectFactory.spring.autoWire.alwaysRespect为true,此时会根据Struts定义的自动装配策略(struts.objectFactory.spring.autoWire)进行自动装配。

u 如果struts.objectFactory.spring.autoWire.alwaysRespect为false,则按constructor方式进行自动装配。

参考SpringObjectFactory.java源代码

    @Override

    public Object buildBean(String beanName, Map<String, Object> extraContext, boolean injectInternal) throws Exception {

        Object o = null;

        try {

            o = appContext.getBean(beanName);

        } catch (NoSuchBeanDefinitionException e) {

            Class beanClazz = getClassInstance(beanName);

            o = buildBean(beanClazz, extraContext);//使用Struts定义的自动装配策略

        }

        if (injectInternal) {

            injectInternalBeans(o);

        }

        return o;

    }

    public Object buildBean(Class clazz, Map<String, Object> extraContext) throws Exception {

        Object bean;

        try {

            // Decide to follow autowire strategy or use the legacy approach which mixes injection strategies

            if (alwaysRespectAutowireStrategy) {

                // Leave the creation up to Spring

                bean = autoWiringFactory.createBean(clazz, autowireStrategy, false);

                injectApplicationContext(bean);

                return injectInternalBeans(bean);

            } else {

                bean = autoWiringFactory.autowire(clazz, AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR, false);

                bean = autoWiringFactory.applyBeanPostProcessorsBeforeInitialization(bean, bean.getClass().getName());

                // We don't need to call the init-method since one won't be registered.

                bean = autoWiringFactory.applyBeanPostProcessorsAfterInitialization(bean, bean.getClass().getName());

                return autoWireBean(bean, autoWiringFactory);

            }

        } catch (UnsatisfiedDependencyException e) {

            if (LOG.isErrorEnabled())

                LOG.error("Error building bean", e);

            // Fall back

            return autoWireBean(super.buildBean(clazz, extraContext), autoWiringFactory);

        }

    }

所有有两种配置方式

第一种:参见1集成步骤中的配置

applicationContext.xml(配置beans的自动装配策略)

struts.xml中action的class属性值与application-context.xml的bean的id相同。

第二种:

applicationContext.xml(不配置beans的自动装配策略)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="login" class="com.jeff.action.LoginAction" scope="prototype">

</bean>
<bean id="personManager" class="com.jeff.service.PersonManager" scope="prototype">

</bean>
...
</beans>

struts.xml(struts.xml中action的class属性值与application-context.xml的bean的id不同,而是设置为Action的类名)

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

<action name="login1" class="com.jeff.action.LoginAction1">

<result>/loginInfo.jsp</result>

</action>

</package>

第二种配置方式,struts.objectFactory.spring.autoWire才有可能起作用。
分享到:
评论

相关推荐

    spring自动装配项目struts2

    在这个"spring自动装配项目struts2"中,我们将探讨如何整合Spring的自动装配特性与Struts2框架,以及Hibernate作为持久层框架的使用。 首先,让我们了解Spring的自动装配(Auto-Wiring)。自动装配是Spring框架的...

    整合struts2和spring源代码(可以直接在tomcat中运行)

    Struts2与Spring的集成要用到Spring插件包struts2-spring-plugin-x-x-x.jar,这个包是同Struts2一起发布的。Spring插件是通过覆盖(override)Struts2的ObjectFactory来增强核心框架对象的创建。当创建一个对象的...

    Struts2+Spring简单示例

    **Struts2与Spring集成:** 集成Struts2和Spring的主要目的是将Spring的依赖注入和管理能力引入到Struts2的应用中。通过使用Spring插件,我们可以让Spring管理Struts2的Action,这样Action实例的生命周期由Spring...

    struts2,spring

    在实际项目中,`teststruts` 文件可能包含了一个简单的示例应用,演示了如何在Struts2和Spring集成环境中配置和运行一个基本的Web应用。通常,这会涉及到以下步骤: 1. **配置Spring**:创建Spring的配置文件,定义...

    Struts2, Spring与myBatis整合示例项目

    Struts2、Spring和MyBatis是Java Web开发中三个非常重要的开源框架,它们各自在应用程序的不同层面上发挥着重要作用。Struts2是MVC(Model-View-Controller)架构的实现,负责处理用户请求并转发到相应的业务逻辑;...

    struts2整合Spring和hibernate案例

    Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自在应用程序的不同层面发挥着重要作用。Struts2作为MVC(模型-视图-控制器)框架,负责处理请求和展示视图;Spring是一个全面的后端解决方案,提供...

    STRUTS2+SpringLib架包

    3. **安全控制**:Spring Security(前身为Acegi)可以与Struts2集成,提供认证和授权功能,增强应用安全性。 4. **测试支持**:Spring的测试框架和Mock对象可以帮助开发者编写单元测试和集成测试,确保代码质量。 ...

    struts2-spring-plus

    综上所述,Struts2-Spring-Plus插件是为了解决Struts2和Spring集成过程中的一些痛点,通过简化配置和增强功能,使得开发者能更加专注于业务逻辑的实现,提高开发效率和代码质量。在实际开发中,正确理解和使用这个...

    Struts2.3.28+spring4.1.6+hibernate4.3.8整合总结(注解)

    - 然后,配置Struts2的核心过滤器,在web.xml中指定`struts2-convention-plugin`,这样Struts2会自动识别注解进行Action配置。 - 接着,配置Spring,创建Spring的配置文件,使用`@Configuration`注解声明这是一个...

    struts2+spring+ibatis整合项目实例

    DAO接口与iBatis的Mapper接口对应,通过MyBatis-Spring插件实现自动装配。 - **事务管理**:Spring的声明式事务管理可以控制事务的边界,确保数据的一致性。 - **SQL映射**:在iBatis的XML映射文件中编写SQL语句,...

    Struts2整合Spring.docStruts2整合Spring.doc

    - **name 装配**:默认情况下,Struts2 会尝试将 Action 的属性名称与 Spring 中 Bean 的 ID 匹配,如果匹配,则自动注入对应的 Bean。 - **type 装配**:如果想根据 Action 类型来注入 Bean,可以在 Struts2 配置...

    struts2+spring2.5+hibernate3.2整合完整项目,带数据库脚本

    Struts2、Spring2.5和Hibernate3.2是Java Web开发中经典的三大框架,它们的整合使用在过去的许多年里被广泛应用于企业级应用系统。这个完整的项目提供了从开发环境到运行环境的所有必要组件,包括数据库脚本,使得...

    struts2 spring ibatis 整合架构

    在Struts2中,Spring可以作为依赖注入容器,管理Action类的实例,提供依赖关系的自动装配。 **iBatis** 是一个SQL映射框架,它将SQL语句与Java代码分离,使得数据库操作更加简洁和灵活。iBatis通过XML配置文件或者...

    struts2 Hibernate spring整合在线考试系统

    最后,利用Spring的applicationContext.xml来装配Bean,将Struts2、Hibernate集成在一起,并配置事务管理器。 在线考试系统的具体功能模块包括:用户注册与登录、考试科目选择、试题随机抽取、考试答题、自动评分...

    SSH 框架 struts-2.3.34 spring4.3.12 hibernate5.0.12

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个框架集合提供了一种高效且强大的方式来构建企业级应用,它整合了模型-视图-控制器(MVC)设计模式、依赖注入(DI)...

    Struts2 Spring Ibatis mysql 项目整合

    在本项目中,Spring可以管理Struts2的Action、Service以及DAO层的实例,通过@Autowired注解自动装配所需依赖。同时,Spring的AOP(面向切面编程)功能可用于事务管理,确保数据操作的一致性。 iBatis作为轻量级的...

    完整的Struts2+Spring2+Hibernate3增删查案例

    Struts2、Spring2和Hibernate3是经典的Java Web开发框架组合,它们在企业级应用中广泛使用,构建了MVC(Model-View-Controller)架构的基础。这个完整的案例旨在展示如何将这三个框架集成,实现数据的增删查操作。...

    全注解,演示Struts2 + Spring + MyBatis整合

    在整合这三个框架时,首先需要在`struts2-spring-plugin.xml`中配置Struts2与Spring的集成,这样Struts2的Action就可以直接由Spring管理。接着,通过`applicationContext.xml`配置Spring的bean,包括数据库连接池、...

    Struts2+Hibernate+Spring整合开发深入剖析与范例应用03

    4. 配置Struts2-Spring插件:这个插件允许Struts2的动作类直接在Spring容器中管理,避免了在Action类中手动装配依赖。 5. 实现业务逻辑:在Action类中,通过@Autowired注解或通过Spring的getBean方法获取由Spring...

Global site tag (gtag.js) - Google Analytics