最近突然想到一个问题
以前在用struts2(注解)+spring
struts的action拖给spring管了(spring的bean在Ioc容器范围内默认都是singlen的),但是没有加@scope("prototype")却从来没有出现过线程安全问题。
而一年前还在学校时做ssh2(没用注解)练习时,不在bean后加prototype都会出现线程安全问题,当时所有的action后都加了scope=prototype。
难道注解和不用注解,struts2创建action的方式不一样?
于是做了个测试
public class TestAction extends BaseAction {
@Autowired
private UserService userService;
@Action("test")
public String test() throws Exception {
System.out.println("action HashCode:"+this.hashCode());
userService.getUserName();
return "success";
}
}
@Service
public class UserService {
public void getUserName(){
System.out.println("service HashCode:"+hashCode()); }
}
连续运行3次发现输出:
action HashCode:9928297
service HashCode:32262619
action HashCode:13620718
service HashCode:32262619
action HashCode:19792917
service HashCode:32262619
输出结果说明 每次的action是不一样的
而每次的service是同一个也就是单例的
(难道action并没有交个spring托管)
又把以前在学校做的老项目(纯xml)拿来 把以前的scope="prototype"去掉
发现action确实是单例的 再加上scope="prototype"后action不是单例了
所以struts2(注解) 在和spring集成时action默认是new的,不用注解spring扫描action的话也是用的new。
而非注解时如果把action加入bean的话默认是单例的。
所以如果大家struts2是用注解的话就不需要在action上加@scope("prototype")了;
分享到:
相关推荐
通过Struts 2-Spring 插件,我们可以将Struts 2 的Action 对象交给Spring 来管理,Spring 负责初始化、配置和销毁这些对象。这样,Action 类不再需要自己去创建依赖的对象,而是通过构造函数或setter 方法接收Spring...
4. **Spring插件**:在Struts2中使用Spring插件(struts2-spring-plugin),这个插件能够帮助Struts2与Spring进行交互,自动将Action类实例化并注入依赖。 5. **Action类**:Action类需要实现Spring的`org.spring...
4. **AOP集成**:结合Spring的AOP能力,可以为Struts2的Action提供切面增强,如性能监控、日志记录等。 5. **简化配置**:通过插件,开发者不再需要在struts.xml或web.xml中显式配置Action的类名和实例,只需在...
4. **Struts2与Spring集成**:为了结合这两个框架的优点,我们需要配置Struts2的Spring插件。这将使Struts2能够从Spring容器中获取Action实例,实现Action的依赖注入。配置通常包括修改`struts.xml`中的`<package>`...
同时,Spring与Struts2可以通过Spring-Struts2插件无缝集成,使得Action可以直接由Spring管理,增强了系统的可测试性。 **MyBatis** 是一个轻量级的持久层框架,它将SQL语句与Java代码分离,提供了更灵活的SQL操作...
4. **整合Spring和Struts2**:使用Spring的Struts2插件,使Spring管理的Bean可以直接在Struts2 Action中注入使用。 5. **整合Spring和MyBatis**:通过Spring的SqlSessionFactoryBean,将MyBatis的SqlSessionTemplate...
对于Struts2和Spring的配置,我们需要在`struts.xml`和`spring-context.xml`文件中进行相应的设置,例如定义Action类、配置Spring Bean以及指定Struts2与Spring的整合方式。同时,确保web.xml文件中配置了...
同时,Spring4的Spring MVC模块可以与Struts2结合使用,提供另一种MVC实现方式,以应对更复杂的应用场景。 Hibernate则是一个强大的对象关系映射(ORM)框架,它简化了Java应用程序对数据库的操作。在电子商务系统...
- **Spring插件**:Struts2提供了一个Spring插件,使得Spring管理的Bean可以直接作为Struts2的Action。 - **Action配置**:在struts.xml中声明Spring管理的Action,不再需要在Action类上添加任何Struts注解。 - *...
当我们把Struts2和Spring结合起来使用时,可以创建出高效且可维护的企业级应用。通常,Struts2负责前端请求的处理,Spring则负责业务逻辑的管理和服务的提供。Spring可以通过其IoC容器初始化Struts2的Action类,并...
3. **配置Struts2**:在Struts2的配置文件(struts.xml)中,需要声明Spring插件,告诉Struts2使用Spring来管理Action实例。这样,每次请求时,Struts2会从Spring容器中获取Action实例,而不是使用默认的实例化方式...
这个“Struts2+Spring3+MyBatis结合项目”是一个实战示例,旨在帮助开发者深入理解和实践这三大框架的集成与应用。 首先,Struts2是一个基于MVC(Model-View-Controller)设计模式的开源Web应用框架。它主要负责...
2. **Spring的Action类管理**:在整合后,Struts2的Action类不再直接创建服务类的实例,而是由Spring容器提供。这样可以利用Spring的事务管理、AOP等功能,使Action类更专注于业务逻辑。 3. **Struts2的插件机制**...
Struts2+Spring+Hibernate和Struts2+Spring+Ibatis是两种常见的Java Web应用程序集成框架,它们分别基于ORM框架Hibernate和轻量级数据访问框架Ibatis。这两种框架结合Spring,旨在提供一个强大的、可扩展的、易于...
在整合Spring时,我们通常会利用Spring的Action代理来替代Struts2默认的Action实例化方式,这样可以将Action的创建和依赖注入交给Spring容器来管理。具体实现包括在Struts配置文件中声明Spring插件,并在Spring的...
4. **整合Struts2和Spring**:使用Struts2的Spring插件,将Spring管理的Bean注入到Struts2的Action中,通常通过`<struts-plugin>`标签进行配置。 5. **配置Struts2**:创建Struts2的配置文件(struts.xml),定义...
除了Action类,Struts2 Spring Plugin还允许我们在拦截器、结果类型和其他Struts2组件中使用Spring注入。这大大增强了Struts2的应用能力,简化了复杂应用的构建过程。 压缩包中的其他文件如"msbase.jar"、...
- **结果类型配置**:Struts2可以配置专门的SpringResult类型,以便在Action执行完成后,通过Spring来创建和返回视图。 在实际开发中,结合Struts2和Spring可以实现更松散的耦合,提高代码的可测试性和可扩展性。...