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框架,以及Hibernate作为持久层框架的使用。 首先,让我们了解Spring的自动装配(Auto-Wiring)。自动装配是Spring框架的...
Struts2与Spring的集成要用到Spring插件包struts2-spring-plugin-x-x-x.jar,这个包是同Struts2一起发布的。Spring插件是通过覆盖(override)Struts2的ObjectFactory来增强核心框架对象的创建。当创建一个对象的...
**Struts2与Spring集成:** 集成Struts2和Spring的主要目的是将Spring的依赖注入和管理能力引入到Struts2的应用中。通过使用Spring插件,我们可以让Spring管理Struts2的Action,这样Action实例的生命周期由Spring...
在实际项目中,`teststruts` 文件可能包含了一个简单的示例应用,演示了如何在Struts2和Spring集成环境中配置和运行一个基本的Web应用。通常,这会涉及到以下步骤: 1. **配置Spring**:创建Spring的配置文件,定义...
Struts2、Spring和MyBatis是Java Web开发中三个非常重要的开源框架,它们各自在应用程序的不同层面上发挥着重要作用。Struts2是MVC(Model-View-Controller)架构的实现,负责处理用户请求并转发到相应的业务逻辑;...
Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自在应用程序的不同层面发挥着重要作用。Struts2作为MVC(模型-视图-控制器)框架,负责处理请求和展示视图;Spring是一个全面的后端解决方案,提供...
3. **安全控制**:Spring Security(前身为Acegi)可以与Struts2集成,提供认证和授权功能,增强应用安全性。 4. **测试支持**:Spring的测试框架和Mock对象可以帮助开发者编写单元测试和集成测试,确保代码质量。 ...
综上所述,Struts2-Spring-Plus插件是为了解决Struts2和Spring集成过程中的一些痛点,通过简化配置和增强功能,使得开发者能更加专注于业务逻辑的实现,提高开发效率和代码质量。在实际开发中,正确理解和使用这个...
- 然后,配置Struts2的核心过滤器,在web.xml中指定`struts2-convention-plugin`,这样Struts2会自动识别注解进行Action配置。 - 接着,配置Spring,创建Spring的配置文件,使用`@Configuration`注解声明这是一个...
DAO接口与iBatis的Mapper接口对应,通过MyBatis-Spring插件实现自动装配。 - **事务管理**:Spring的声明式事务管理可以控制事务的边界,确保数据的一致性。 - **SQL映射**:在iBatis的XML映射文件中编写SQL语句,...
- **name 装配**:默认情况下,Struts2 会尝试将 Action 的属性名称与 Spring 中 Bean 的 ID 匹配,如果匹配,则自动注入对应的 Bean。 - **type 装配**:如果想根据 Action 类型来注入 Bean,可以在 Struts2 配置...
Struts2、Spring2.5和Hibernate3.2是Java Web开发中经典的三大框架,它们的整合使用在过去的许多年里被广泛应用于企业级应用系统。这个完整的项目提供了从开发环境到运行环境的所有必要组件,包括数据库脚本,使得...
在Struts2中,Spring可以作为依赖注入容器,管理Action类的实例,提供依赖关系的自动装配。 **iBatis** 是一个SQL映射框架,它将SQL语句与Java代码分离,使得数据库操作更加简洁和灵活。iBatis通过XML配置文件或者...
最后,利用Spring的applicationContext.xml来装配Bean,将Struts2、Hibernate集成在一起,并配置事务管理器。 在线考试系统的具体功能模块包括:用户注册与登录、考试科目选择、试题随机抽取、考试答题、自动评分...
SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个框架集合提供了一种高效且强大的方式来构建企业级应用,它整合了模型-视图-控制器(MVC)设计模式、依赖注入(DI)...
在本项目中,Spring可以管理Struts2的Action、Service以及DAO层的实例,通过@Autowired注解自动装配所需依赖。同时,Spring的AOP(面向切面编程)功能可用于事务管理,确保数据操作的一致性。 iBatis作为轻量级的...
Struts2、Spring2和Hibernate3是经典的Java Web开发框架组合,它们在企业级应用中广泛使用,构建了MVC(Model-View-Controller)架构的基础。这个完整的案例旨在展示如何将这三个框架集成,实现数据的增删查操作。...
在整合这三个框架时,首先需要在`struts2-spring-plugin.xml`中配置Struts2与Spring的集成,这样Struts2的Action就可以直接由Spring管理。接着,通过`applicationContext.xml`配置Spring的bean,包括数据库连接池、...
4. 配置Struts2-Spring插件:这个插件允许Struts2的动作类直接在Spring容器中管理,避免了在Action类中手动装配依赖。 5. 实现业务逻辑:在Action类中,通过@Autowired注解或通过Spring的getBean方法获取由Spring...