<bean id="personAction" scope="prototype" class="quickstart.action.PersonAction">
<constructor-arg ref="personService" />
</bean>
在配置文件中,bean默认是单例模式,应用服务器启动后就会立即创建bean,以后就可以重复使用。
这带来一个问题,bean的全局变量被赋值以后,在下一次使用时会把值带过去。也就是说,bean是有状态的。
在web状态下,请求是多线程的,全局变量可能会被不同的线程修改,尤其在并发时会带来意想不到的bug。
而在开发时,访问量很小,不存在并发、多线程的问题,程序员极有可能会忽视这个问题。
所以在配置action bean时,应使用scope="prototype",为每一次request创建一个新的action实例。这
符合struts2的要求,struts2为每一个request创建一个新的action实例。当request结束,bean就会被jvm
销毁,作为垃圾收回。
当然,也可以设置scope="session",也能避免web中action的并发问题,只为当前用户创建一次bean,直至
session消失。在这种情况下,对当前用户而言,bean是有状态的。好处就是少创建bean的实例,有那么一
点点性能的提升
应用场景:
1. 多数情况下应使用prototype
2. 若用户不多,且频繁操作(频繁使用action),硬件一般,可以考虑session,兴许还能提升一点点性能。
相关推荐
这个属于与Spring整合的问题,Spring容器在初始化对象的时候会根据bean的scope配置来考虑是重新建立一个对象,还是继续使用原来的对象,拿struts2的action的bean来说,如果scope这个参数没有配置,默认就是单例,即...
这个属于与Spring整合的问题,Spring容器在初始化对象的时候会根据bean的scope配置来考虑是重新建立一个对象,还是继续使用原来的对象,拿struts2的action的bean来说,如果scope这个参数没有配置,默认就是单例,即...
- Spring默认使用单例模式管理Bean,需要多例时需设置`scope`属性为`"prototype"`。 #### 三、使用AOP进行整合 **AOP(Aspect Oriented Programming,面向切面编程)** 是Spring提供的另一种强大功能,它可以用来...
- **Spring的Scope="Prototype"管理**:利用Spring的bean管理功能,将Action的scope设置为"prototype",确保每次请求都会创建一个新的Action实例。 ### 2. Struts的MVC实现 Struts框架遵循经典的Model-View-...
确保Action线程安全的方法包括:声明局部变量、扩展RequestProcessor以每次创建新的Action实例,或者在Spring中使用`scope="prototype"`配置来管理Action。 2. **Struts2的MVC实现** 在Struts2中: - **Model**:...
- 在 Spring 中使用 `scope="prototype"` 来管理 Action 的生命周期,确保每个 HTTP 请求都有一个新的 Action 实例。 #### 4. Struts 如何实现 MVC 模式 Struts 采用 MVC 架构模式来组织应用程序结构: - **Model...
- 在Spring配置文件中定义Action类及其依赖,Action类通常配置为`scope="prototype"`,以确保每次请求都能获得一个新的实例。 - 在Struts2的配置文件(通常是struts.xml)中,指定`<action>`元素的`class`属性为...
4. 在Spring配置文件中定义Action类Bean,并设置为原型(prototype)作用域。 5. 配置Hibernate的SessionFactory和DataSource。 在实际开发中,我们通常按照数据库层(POJO和Hibernate映射)、数据访问层(DAO)、...
确保Action线程安全的方式包括使用局部变量、每次请求时创建新的Action实例(例如通过Spring的`scope="prototype"`配置),或者扩展`RequestProcessor`以实现线程局部存储。 4. MVC模式在Struts中实现如下:Model由...
2. **Spring与Struts的集成**:使用Spring的Struts插件,将Action类的实例交给Spring容器管理,通过`<bean>`标签定义Action类并设置scope为prototype,保证每次请求都创建新的Action实例。 3. **Spring与Mybatis的...
为了与Struts2保持一致,需要将Action的Scope设置为`prototype`或`session`。 - **`prototype`**:为每个请求创建一个新的Action实例。 - **`session`**:为每个会话创建一个新的Action实例。 示例配置如下: ```...
整合Struts2和Spring,首先需要在Struts2的配置文件`struts.xml`中添加Spring插件,这样Struts2可以通过Spring来管理Action类。接着,将Action类声明为Spring的bean,并在Spring的配置文件`applicationContext.xml`...
1. **配置错误**:检查Spring的配置文件(如`applicationContext.xml`),确保所有需要被注入的对象(如Service、DAO)都有对应的bean定义,并且正确设置了`scope`属性(通常为`prototype`或`singleton`)。...
- 配置Spring:在applicationContext.xml中定义Action类作为bean,设置其scope为prototype,因为每个请求都需要一个新的Action实例。 - 配置Hibernate:在hibernate.cfg.xml中设置数据库连接信息,配置实体类和...
@Scope("prototype") public class UserAction extends WebBaseAction implements ModelDriven<User> { @Autowired private UserService userService; private User user; public User getModel() { return...
在Spring的配置文件中,我们需要声明`UploadAction`为一个bean,并指定其scope为prototype,因为每次HTTP请求都需要一个新的实例。 在实现上传功能时,我们会用到Servlet 3.0提供的异步处理能力。通过开启Servlet的...
接着,`@Controller`和`@Scope("prototype")`是Spring的注解,它们标记`RegisterAction`为一个Spring的控制器组件,并设置其作用域为原型(prototype),意味着每次请求都会创建一个新的实例。`@Resource(name=...
为了确保线程安全,可以避免使用类变量,或者在Spring中将Action配置为原型(`scope="prototype"`),这样每次请求都会创建一个新的Action实例。 2. **Struts实现MVC**: 在Struts框架中,Model由JavaBean或EJB...
在`struts.xml`文件中,我们需要指定使用Spring作为对象工厂,这允许Struts2从Spring容器中获取Action实例。添加以下关键代码: ```xml <constant name="struts.objectFactory" value="spring" /> <package name...
在 `struts.xml` 文件中,将 Action 类的配置改为引用 Spring 中的 Bean ID,如: ```xml <action name="login" class="loginAction"> ``` 这样,Struts2 就会通过 Spring 获取 Action 实例。 ### 2. Spring 与 ...