這里所謂的非侵入性,是指一定程度上的耦合性,比如IMVC和待開發項目的耦合性,servlet容器和IMVC的耦合性,IMVC內部處理的耦合性等等。
1.action非繼承。由于java語言不允許多重繼承,如果action被框架所迫需要繼承類的話,那么這個action的擴展性將受到一定的限制,比如struts的繼承性就設計的比較失敗。
2.formBean的無侵入,IMVC中的formBean不需要繼承人和類,甚至不需要實現任何接口,完全的一個pojo實體就能勝任。
3.半servlet容器相關性,之所以說是半,因為IMVC的容器無關性是間于struts和webwork之間的,struts的action接受 httpServletRequest和HttpServletResponse類實例作為參數,另測試變得避免麻煩(雖然有工具可以輔助測試),這種 servlet完全相關性的設計,讓action中獲取servlet數據變得容易,但是卻帶來了測試痛苦的后果。而反過來,webwork的 action中不需要傳入任何servlet相關部件,webwork通過一個轉回去把servlet中的數據拷貝到一個容器無關類。非常有利于測試,但是對于在action中獲取servlet數據變得不夠直觀(可以獲取的),而且,每次請求都拷貝數據也有礙于性能的提升。IMVC的設計則介于兩者之間。在IMVC的action中沒有傳入servlet任何部件,但是可以通過InstantContext獲得request和response(注意不是獲取request的數據,而是request,不用花費拷貝到性能)。但是,在攔截器設計中,傳入的卻是 servlet部件,因為攔截器一般不會用于action單元測試,而且如果你對上面的action半容器無關性對于單元測試和獲取cookies的數據有疑惑,那么可以在攔截器中獲取你想要的cookie,然后傳入攔截器的另一個參數Value,action通過Value獲取cookie,這樣一來,明明半容器無關性的action測試,卻可以通過攔截器來實現完全容器無關的action,這樣一來,既滿足性能需求,又滿足測試需求。
4 攔截器的天下。和webwork一樣,IMVC中的攔截器是相當重要的組成部分。可以配置全局攔截器,路徑攔截器,ajax鏈(這個以后會詳解)攔截器,有趣的是,我們還有一個文件上傳攔截器,IMVC是集成文件上傳到,可以通過在action幾行代碼實現一個文件上傳,而一般我們要更具自己的特性來處理上傳完后的文件或者自定義的取名字,在或者做自己的縮略圖等等。IMVC設計了一個文件上傳攔截器,可以通過實例一個攔截器來實現這些功能,非常方便。
--InstantMVC:j2ee輕量級mvc框架