2011-01-20 28 views
5

我很難決定使用哪個「Open Session In View」:使用Spring MVC的攔截器配置OpenSessionInViewInterceptor或者在web.xml的過濾器中配置OpenSessionInViewFilter?從我研究的內容來看,他們做的事情基本相同,但我試圖瞭解每種類型的差異和用法。使用哪一個:OpenSessionInViewInterceptor或OpenSessionInViewFilter?

兩者之間最大的區別在於不能在web.xml中使用過濾器的人(比如說servlet 2.2和更早的版本),他們唯一的選擇就是使用OpenSessionInViewInterceptor。不知何故,我傾向於攔截器只是因爲我必須爲我的項目創建一個自定義攔截器,所以我想在Spring MVC配置文件中將所有這些「過濾器」分組,而不是讓web.xml中的OpenSessionInViewFilter和我的自定義Spring MVC配置文件中的攔截器。確定使用哪一種方法確實是一種蹩腳的方式,我的好奇心將我殺死在這裏。

任何人都可以分享你的想法嗎?你們使用哪一個?

感謝。

回答

8

正如你所說,這兩者或多或少是等價的。 Spring爲它們提供了這兩個選項,以便您可以選擇最適合現有應用程序的那個。

如果你使用Spring MVC,那麼使用攔截器是有意義的,因爲它更容易配置,並且更好地與Spring MVC集成。但是,如果您不使用Spring MVC,並且只在業務邏輯級別使用Spring,那麼攔截器並不是一個真正的選項,而且過濾器變得更加適合。由於過濾器不是由Spring管理的,它們很難配置爲與Spring集成,但這是一個折衷。

+0

謝謝。我相信使用攔截器的一個好處是容易將Spring Bean接線到它中,而在使用過濾器時我不能使用該功能。 – limc 2011-01-21 02:52:00

+0

不要復活舊的帖子,但如果你「只在商業邏輯層面上使用Spring」,使用@Transactional`並組織你的代碼來處理它是否更有意義?我沒有爭論,只是不理解`OSIVF`在非MVC應用程序中的用處。 – Andy 2014-08-25 20:25:25

4

如果您有任何請求不會通過彈簧控制器,即通過自定義servlet或jsp直接點擊的遺留代碼,那麼過濾器將覆蓋這些請求並確保它們被包裝會議。攔截器不會涵蓋這些請求,因爲這些請求不會被Spring DispatcherServlet拾取。

相關問題