Spring MVC啟動時初始化的幾個常用方法


Spring-MVC的應用中,要實現類似的功能,主要是通過實現下面這些接口(任選一,至少一個即可)

一、ApplicationContextAware接口

1
2
3
4
5
6
7
8
9
package org.springframework.context;
 
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.Aware;
import org.springframework.context.ApplicationContext;
 
public interface ApplicationContextAware extends Aware {
     void setApplicationContext(ApplicationContext var1) throws BeansException;
}

二、ServletContextAware 接口

1
2
3
4
5
6
7
8
package org.springframework.web.context;
 
import javax.servlet.ServletContext;
import org.springframework.beans.factory.Aware;
 
public interface ServletContextAware extends Aware {
     void setServletContext(ServletContext var1);
}

三、InitializingBean 接口

1
2
3
4
5
package org.springframework.beans.factory;
 
public interface InitializingBean {
     void afterPropertiesSet() throws Exception;
}

四、ApplicationListener<ApplicationEvent> 接口

1
2
3
4
5
6
7
8
package org.springframework.context;
 
import java.util.EventListener;
import org.springframework.context.ApplicationEvent;
 
public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {
     void onApplicationEvent(E var1);
}

示例程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package test.web.listener;
 
import org.apache.logging.log4j.*;
import org.springframework.beans.*;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.*;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
import org.springframework.web.context.ServletContextAware;
import javax.servlet.ServletContext;
 
@Component
public class StartupListener implements ApplicationContextAware, ServletContextAware,
         InitializingBean, ApplicationListener<ContextRefreshedEvent> {
 
     protected Logger logger = LogManager.getLogger();
 
     @Override
     public void setApplicationContext(ApplicationContext ctx) throws BeansException {
         logger.info( "1 => StartupListener.setApplicationContext" );
     }
 
     @Override
     public void setServletContext(ServletContext context) {
         logger.info( "2 => StartupListener.setServletContext" );
     }
 
     @Override
     public void afterPropertiesSet() throws Exception {
         logger.info( "3 => StartupListener.afterPropertiesSet" );
     }
 
     @Override
     public void onApplicationEvent(ContextRefreshedEvent evt) {
         logger.info( "4.1 => MyApplicationListener.onApplicationEvent" );
         if (evt.getApplicationContext().getParent() == null ) {
             logger.info( "4.2 => MyApplicationListener.onApplicationEvent" );
         }
     }
 
}

運行時,輸出的順序如下:

1 => StartupListener.setApplicationContext
2 => StartupListener.setServletContext
3 => StartupListener.afterPropertiesSet
4.1 => MyApplicationListener.onApplicationEvent
4.2 => MyApplicationListener.onApplicationEvent
4.1 => MyApplicationListener.onApplicationEvent

注意:onApplicationEvent方法會觸發多次,初始化這種事情,越早越好,建議在setApplicationContext方法中處理。

 

最后一步別忘了,在spring-config.xml中加入自定義的bean,如下面的例子:

 

   <!--初始化操作的bean 在spring初始化完成的時候執行這個操作 -->
	<bean class="com.**.firm.fclient.web.listener.ApplicationContextListener"/>

 

此外還有一種方法:

 寫個BEAN,將要執行的操作寫在構造函數里,在將這個類配置到XML里,比如配置到SPRING-MVC.XML里  <bean         class="com.test.xx"> 自己的類 

不過不推薦使用這種方法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM