<bean id="meetAction" class="com.web.actions.MeetsAction" scope="prototype">
<property name="meetsService" ref="meetsService" />
</bean>
scope="prototype"没写的问题,项目中对一个表的增删该操作是用一个action,这个action有add,update,delete,save这些方法, 添加和修改是共用一个页面,当页面得到id时代表进行的修改操作,反之是添加操作。因为在配置spring的bean是忘了写scope="prototype", 所以每次添加时都显示最后一次访问过的记录, scope = "prototype" 会在该类型的对象被请求时创建一个新的action对象。如果没有配置scope=prototype则添加的时候不会新建一个action,他任然会保留上次访问的过记录的信息。
webwork的Action不是线程安全的,要求在多线程环境下必须是一个线程对应一个独立的实例,不能使用singleton。所以,我们在Spring配置Webwork Action Bean时,需要加上属性scope=”prototype”或singleton=”false”。
singleton模式指的是对某个对象的完全共享,包括代码空间和数据空间,说白了,如果一个类是singleton的,假如这个类有成员变量,那么这个成员变量的值是各个线程共享的(有点类似于static的样子了),当线程A往给变量赋了一个值以后,线程B就能读出这个值。因此,对于前台Action,肯定不能使用singleton的模式,必须是一个线程请求对应一个独立的实例。推而广之,只要是带数据成员变量的类,为了防止多个线程混用数据,就不能使用singleton。对于我们用到的Service、Dao,之所以用了singleton,就是因为他们没有用到数据成员变量,如果谁的Service需要数据成员变量,请设置singleton=false。
分享到:
相关推荐
Struts2.0的核心配置文件是`struts.xml`,这个文件定义了应用的Action类、结果类型、拦截器链等关键元素。例如: ```xml <package name="default" namespace="/" extends="struts-default"> <action name="login" ...
首先,Struts2.0引入了注解支持,使得开发者可以在Action类中直接定义方法与Struts的Action映射关系,而无需编写XML配置文件。例如,在`RegisterAction`类中,`@ParentPackage("struts-default")`注解指定了基础包,...
- 在Spring配置文件中定义Action类及其依赖,Action类通常配置为`scope="prototype"`,以确保每次请求都能获得一个新的实例。 - 在Struts2的配置文件(通常是struts.xml)中,指定`<action>`元素的`class`属性为...
这个属于与Spring整合的问题,Spring容器在初始化对象的时候会根据bean的scope配置来考虑是重新建立一个对象,还是继续使用原来的对象,拿struts2的action的bean来说,如果scope这个参数没有配置,默认就是单例,即...
在`struts.xml`中,通过指定Action的class属性为Spring配置文件中bean的id来实现整合: ```xml <action name="LoginAction" class="LoginAction"> <result name="success">/index.jsp </action> ``` 2. **...
在 `struts.xml` 文件中,将 Action 类的配置改为引用 Spring 中的 Bean ID,如: ```xml <action name="login" class="loginAction"> ``` 这样,Struts2 就会通过 Spring 获取 Action 实例。 ### 2. Spring 与 ...
然后,在struts.xml中配置Action,使用`@SpringBean`注解来指定Spring中的bean: ```xml <package name="default" namespace="/" extends="struts-default"> <action name="uploadImage" class="@SpringBean...
1. **配置错误**:检查Spring的配置文件(如`applicationContext.xml`),确保所有需要被注入的对象(如Service、DAO)都有对应的bean定义,并且正确设置了`scope`属性(通常为`prototype`或`singleton`)。...
首先,我们需要在Struts 2的配置文件(struts.xml)中启用Spring插件: ```xml <constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory"/> ``` 接着,在Spring配置...
整合Struts2和Spring,首先需要在Struts2的配置文件`struts.xml`中添加Spring插件,这样Struts2可以通过Spring来管理Action类。接着,将Action类声明为Spring的bean,并在Spring的配置文件`applicationContext.xml`...
- **Spring 配置文件**:在 Spring 配置文件中,定义需要被 Struts2 使用的 Action 对象,使用 `scope` 属性控制bean的作用范围,通常为 `prototype` 或 `request`。 5. **Action类的配置**: - Action 类通常...
- Spring默认使用单例模式管理Bean,需要多例时需设置`scope`属性为`"prototype"`。 #### 三、使用AOP进行整合 **AOP(Aspect Oriented Programming,面向切面编程)** 是Spring提供的另一种强大功能,它可以用来...
在`struts.xml`文件中,我们需要指定使用Spring作为对象工厂,这允许Struts2从Spring容器中获取Action实例。添加以下关键代码: ```xml <constant name="struts.objectFactory" value="spring" /> <package name...
在Struts2的配置文件`struts.xml`中,我们需要告诉Struts2使用Spring作为其对象工厂,这样Action类实例将由Spring来创建: ```xml <constant name="struts.objectFactory" value="spring" /> ``` 然后,在`...
这个属于与Spring整合的问题,Spring容器在初始化对象的时候会根据bean的scope配置来考虑是重新建立一个对象,还是继续使用原来的对象,拿struts2的action的bean来说,如果scope这个参数没有配置,默认就是单例,即...
2. **Spring与Struts的集成**:使用Spring的Struts插件,将Action类的实例交给Spring容器管理,通过`<bean>`标签定义Action类并设置scope为prototype,保证每次请求都创建新的Action实例。 3. **Spring与Mybatis的...
最后,在`struts.xml`文件中配置Action,使用Spring的IOC来管理Action对象: ```xml <!-- 使用Spring管理Action --> <constant name="struts.objectFactory" value="spring"/> <!-- 配置Action --> <package name=...
5. **Action配置**:在Struts的配置文件中,指定Action的class属性为Spring中的bean ID,而不是实际的类名。例如: ```xml <action name="helloWorld" class="helloWorldAction" method="execute"> <result name=...
2. **配置Struts2**: 在`struts.xml`配置文件中,启用Spring插件。例如: ```xml <constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" /> ``` 3. **配置Spring...
- 配置Spring:在applicationContext.xml中定义Action类作为bean,设置其scope为prototype,因为每个请求都需要一个新的Action实例。 - 配置Hibernate:在hibernate.cfg.xml中设置数据库连接信息,配置实体类和...