[英]How to Initialize the application in spring?
現在直接來到我的觀點,
在JSP
我會做我的應用程序的初始化過程,比如
<%! public void jsp_init(){
//Initialise the domain server to create protocol
//Create the logging file
}%>
現在我將重建我之前從Servlets
到Spring 3.2
應用程序。
我怎么能用Spring 3.2
做到這一點?
我的colleague
說我initialization with Constructor of the Spring Controller
。
因為我在applicationContext.xml
為controller class
創建了bean,所以我在web.xml
使用ContextLoadListner
加載applicationContext.xml
文件。
這是正確的初始化方式嗎?
春天的ApplicationListener怎么樣?
哪個是在spring 3.2
初始化應用程序的最佳方法?
希望我們的堆棧用戶能給出一個好的解決方案
如果配置正確,Spring會為您做很多事情。 如果你真的需要執行代碼(vs使用像Log4J那樣自動配置的東西),我建議注冊一個InitializingBean
並覆蓋afterPropertiesSet
。 然后,您可以將此bean定義添加到applicationContext.xml文件中:
<bean id="initializer" class="com.myproject.MyInitializer" />
因此,當應用程序完全初始化時,Spring將調用MyInitializer.afterPropertiesSet()
方法。 您也可以在已經向應用程序上下文注冊的bean上使用@PostConstruct
注釋,但是無法保證在調用該方法時將初始化其余的應用程序。 如果您希望在設置完所有內容后運行它,則可以使用Initializing Bean方法。 我已經使用這種策略來啟動一個服務器套接字等,它需要獨立於Web請求生命周期運行。
你為什么要自己初始化spring應用程序? Spring將自動為您執行:這是您告訴服務器初始化spring的方法:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/app.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
這將在部署期間發生,並且定義所有bean將被初始化(取決於懶惰)。 如果你真的想在初始化bean之后做一些事情,那么在使用之前然后使用InitializingBean Example
MyBean implements InitializingBean{
afterPropertiesSet() {
//do here
}
}
ContextLoaderListener
是一種啟動Spring的WebApplicationContext
的引導程序,而ApplicationListener
更多地處於Java應用程序級別本身而不是Web應用程序上下文。
ContextLoaderListener
是一個很棒的標准工具,用於應用程序的上下文化,如果它有多個DispatcherServlet
或一些servlet / servlet過濾器映射到不同的服務。 基本上,為這些應用程序的不同servlet提供監聽器是很方便的,這樣你就可以進行細粒度的語境化。
我不知道你正在構建的應用程序的性質,但我認為你現在正在嘗試一些基本的東西。 如果是這種情況,即使在設置更復雜的情況下,最好在啟動時加載一個控制器來處理主要的初始化例程,包括上下文化。 你可以在web.xml中使用你擁有的控制器bean:
<servlet>
<servlet-name>your-servlet</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
每當您讀取某個url模式時,也可以映射和調用此servelt
@RequestMapping("/welcome")
public ModelAndView helloWorld()
在Web部署描述符中,這一點就像您將servlet映射到Spring Security等其他Spring服務:
<servlet-mapping>
<servlet-name>crunchify</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
因此,您實際上不需要使用控制器的構造函數,也不需要使用ContextLoaderListener
或其他偵聽器來執行簡單的初始化任務。 不過,在擴展應用程序時,學習它們的用例非常方便。
在這里閱讀有關調度程序servlet的更多信息:
您可以通過使用帶有@PostConstruct
的bean並在spring中注入servlet-config來實現此目的。 看看這里的代碼和底部的一行。
<beans:bean id="PlayerImportDaoImpl"
class="com.footieview.app.importer.dao.PlayerImportDaoImpl" />
這將在啟動時注入此bean,此bean上的方法具有注釋@PostConstruct
- 這意味着在啟動時會調用此方法。
創建一個Spring 3 MVC應用程序,您不需要這樣做!
Spring MVC支持JSP,您可以通過Annotations進行所有配置
有關示例,請參見http://fruzenshtein.com/spring-mvc-creation-of-simple-controller-with-java-based-config/ 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.