2015-11-16 76 views
0

Spring的默认范围是singleton。但是,对于运行服务于Web请求的MVC控制器,并且在我的项目中,可能包含@Autowired原型bean,我想强制它们默认为至少request - 如果不是原型,则使用放大器,而不使用注释每个并且每个控制器@Scope强制Spring MVC控制器请求范围

你认为这是可能的吗?如果是这样,怎么样?

回答

1

组合的注释可能很适合。

@Target(TYPE) 
@Retention(RUNTIME) 
@Documented 
@Controller 
@Scope(WebApplicationContext.SCOPE_REQUEST) 
public @interface RequestScopedController { ... } 

这些控制器将使用@RequestScopedController注释代替@Controller

+0

很酷,我不知道组成的注释。如果解决方案可以防止名称冲突(例如,在不同包中的MainController-s),我可能会接受这个名称 –

+0

名称冲突有任何问题吗? –

+0

是的。例如,我在多个软件包中有多个'MainController',这样命名,因为它们在多个路径中提供'/ path/to/main' –

1

你应该添加@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)在您的bean(不是控制器),这些将被自动装配到您的控制器中。通过这种方式,你可以通知spring在你的autowired bean周围创建代理 - 所以可以在singleton类中使用它。