Spring MVC请求和原型范围不起作用

时间:2013-01-25 07:15:18

标签: java spring-mvc scope

在我的Spring应用程序中,下面是场景:

我有一个控制器A。另一个使用范围B定义的bean Request

@Service("name")
@Scope("request")
class B{
   private String name;
   public void init(String name){
     this.name = name
}
}

@Controller
class A{

@Autowired
@Qualifier("name")
B ob;

//using B
}
  1. 现在,当我运行应用程序时,我得到了无法创建新bean的异常。
  2. 如果我将范围更改为prototype。如果我为每个请求打印B的hashCode,我得到相同的输出,这意味着它不会为每个请求注入新对象。
  3. 如果求解仍然不是线程安全的,则ob引用将指向新的原型对象或请求对象,并且处理的其他请求将引用新的B对象。最好的方法是获取主要的Spring MVC applciation上下文,然后从方法中获取getBean。这样在本地我可以访问它并获得一个新的实例。但是我该如何解决线程安全问题。

1 个答案:

答案 0 :(得分:1)

@Controller在Singleton范围内。使用代理bean。

@Service("name")
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
class B{
}