2011-08-04 85 views
6

我是JavaEE的新手,但具有ASP.NET MVC的一些經驗。使用ASP.NET MVC,我知道我們可以使用ASP.NET MVC Web應用程序製作插件架構,以便您可以製作具有MVC結構的DLL,並將其放入現有的ASP.NET MVC Web應用程序中,以使其無需編譯Web應用程序。 http://www.wynia.org/wordpress/2008/12/05/aspnet-mvc-plugins/Spring MVC插件體系結構

我不知道這種架構是否可以使用Spring MVC。例如,當我使用MVC結構創建jar(或war)文件並將其放入現有的Spring MVC Web應用程序中時,它應該可以在不重新編譯Web應用程序的情況下運行。如果這是可能的,我該如何做到這一點?任何參考將不勝感激。

回答

2

有可能沒有重新編譯,但可能不是沒有重新啓動。您可以創建一個放入WEB-INF/lib目錄的.jar文件。通過使用classpath scanning,您應該能夠在啓動時部署新的控制器。您可以完全跳過視圖並直接將數據輸出到ServletResponse。從一個罐子渲染視圖可能或不可能,我不知道。

+0

聽起來不錯。重新啓動部分是好的。我相信在ASP.NET MVC中也是如此。謝謝哥們。 – Jon

1

聽起來像要搜索「hotdeploy」。

你所要求的不是Spring的一個特性,而是JVM和應用服務器的一個特性。應用程序服務器能夠看到實際上你的類已經改變了,並且使用了一些聰明的ClassLoader技巧,它可以在runinng JVM變得可用時將新版本加載到它。 Java實際上並沒有設計成這樣工作,所以存在一些問題(ClassLoader,內存泄漏,hotdeploy是找到更多潛在問題和可能解決方案的好關鍵詞)。我不會推薦這個用於生產使用,但它可以在開發過程中很方便。

由於這是應用程序服務器的一項功能,實際的詳細信息取決於特定的應用程序服務器,並在其文檔中進行了說明。

如果你只是想要一些插件魔法,而不是實際的熱插件,還有其他的事情可以做。一個自定義的ClassLoader可以從任何你想要的源文件(文件,網絡,數據庫..)加載類,然後你可以通過反射來實例化和使用它們。 (這是將戰爭部署到Tomcat/JBoss或其他任何情況時會發生的情況)。訪問和動態重新加載jar/war文件內的非類資源比較容易。