2015-11-16 110 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類中使用它。