Spring的默認範圍是singleton
。但是,對於運行服務於Web請求的MVC控制器,並且在我的項目中,可能包含@Autowired
原型bean,我想強制它們默認爲至少request
- 如果不是原型,則使用放大器,而不使用註釋每個並且每個控制器@Scope
強制Spring MVC控制器請求範圍
你認爲這是可能的嗎?如果是這樣,怎麼樣?
Spring的默認範圍是singleton
。但是,對於運行服務於Web請求的MVC控制器,並且在我的項目中,可能包含@Autowired
原型bean,我想強制它們默認爲至少request
- 如果不是原型,則使用放大器,而不使用註釋每個並且每個控制器@Scope
強制Spring MVC控制器請求範圍
你認爲這是可能的嗎?如果是這樣,怎麼樣?
組合的註釋可能很適合。
@Target(TYPE)
@Retention(RUNTIME)
@Documented
@Controller
@Scope(WebApplicationContext.SCOPE_REQUEST)
public @interface RequestScopedController { ... }
這些控制器將使用@RequestScopedController
註釋代替@Controller
。
你應該添加@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
在您的bean(不是控制器),這些將被自動裝配到您的控制器中。通過這種方式,你可以通知spring在你的autowired bean周圍創建代理 - 所以可以在singleton類中使用它。
很酷,我不知道組成的註釋。如果解決方案可以防止名稱衝突(例如,在不同包中的MainController-s),我可能會接受這個名稱 –
名稱衝突有任何問題嗎? –
是的。例如,我在多個軟件包中有多個'MainController',這樣命名,因爲它們在多個路徑中提供'/ path/to/main' –