javascript
了解Spring Web初始化
幾年前,我們大多數人習慣到處編寫XML配置文件,甚至可以設置簡單的Java EE應用程序。 如今,使用Java或Groovy來配置項目已成為一種首選方式–您只需要看一下Spring框架的其他版本中引入的Gradle或功能,就可以對此進行總結。
現在,我將為Web應用程序配置Spring上下文。
Java EE提供了ServletContainerInitializer接口,該接口允許在Web應用程序啟動時通知庫。 從Spring 3.1開始,我們有了SpringServletContainerInitializer類,該類通過實例化所有實現此接口的找到的類來處理WebApplicationInitializer ,并根據@Order注釋對它們進行排序(未注釋的類獲得最高的順序,因此它們將在最后處理)并調用onStartup()方法。
從3.2版開始的Spring給我們提供了一些實現WebApplicationInitializer接口的類,首先是AbstractContextLoaderInitializer 。 spring-web模塊中包含的此類使用抽象的createRootApplicationContext()方法創建應用程序上下文,并將其委托給ContextLoaderListener ,然后將其注冊到ServletContext實例中。 使用此類創建應用程序上下文如下所示:
public class SpringAnnotationWebInitializerextends AbstractContextLoaderInitializer {@Overrideprotected WebApplicationContext createRootApplicationContext() {AnnotationConfigWebApplicationContext applicationContext =new AnnotationConfigWebApplicationContext();applicationContext.register(SpringAnnotationConfig.class);return applicationContext;}}這是啟動Spring Web上下文的最簡單方法。 但是,如果我們想體驗Spring MVC提供的好處,并且不想手動注冊DispatcherServlet ,那么最好使用另一個類: AbstractDispatcherServletInitializer 。 它擴展了上一類,并添加了兩個抽象方法: createServletApplicationContext()和getServletMappings() 。 第一個方法返回將傳遞給DispatcherServlet的 WebApplicationContext ,它將自動添加到容器ServletContext中 。 請注意,此上下文將被建立為createRootApplicationContext()方法返回的上下文的子級。 第二種方法-您可能已經推論出了-返回在servlet注冊期間使用的映射。 如果需要任何自定義過濾器,還可以重寫getServletFilters()方法,因為默認實現只返回空數組。 使用此類的示例性實現可以是:
public class SpringWebMvcInitializerextends AbstractDispatcherServletInitializer {@Overrideprotected WebApplicationContext createRootApplicationContext() {AnnotationConfigWebApplicationContext applicationContext =new AnnotationConfigWebApplicationContext();applicationContext.register(SpringRootConfig.class);return applicationContext;}@Overrideprotected WebApplicationContext createServletApplicationContext() {AnnotationConfigWebApplicationContext applicationContext =new AnnotationConfigWebApplicationContext();applicationContext.register(SpringMvcConfig.class);return applicationContext;}@Overrideprotected String[] getServletMappings() {return new String[]{"/*"};}}現在最后但絕對不是最不重要的一類: AbstractAnnotationConfigDispatcherServletInitializer 。 在這里,我們可以看到簡化Spring初始化的進一步步驟-我們不需要手動創建上下文,而只需在getRootConfigClasses()和getServletConfigClasses()方法中設置適當的配置類。 我希望您已經熟悉這些名稱,因為它們的工作方式與前一種情況完全相同。 當然,由于此類擴展了AbstractDispatcherServletInitializer,我們仍然可以重寫getServletFilters() 。 最后,我們可以通過以下方式實現我們的配置:
public class SpringWebMvcSimpleInitializerextends AbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class[] {SpringRootConfig.class};}@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class[] {SpringMvcConfig.class};}@Overrideprotected String[] getServletMappings() {return new String[]{"/*"};}}- 如果您希望看到更廣泛的上下文,請遵循我的GitHub存儲庫中的示例: https : //github.com/jkubrynski/spring-java-config-samples/
翻譯自: https://www.javacodegeeks.com/2014/01/understanding-spring-web-initialization.html
總結
以上是生活随笔為你收集整理的了解Spring Web初始化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国债逆回购跟债券的区别是什么?
- 下一篇: 微信刷掌支付登陆广东 711 便利店,全