ApplicationListener

 

package com.yk.test.executor.processor  
public class InstantiationTracingBeanPostProcessor implements ApplicationListener<ContextRefreshedEvent> {  
    @Override  
    public void onApplicationEvent(ContextRefreshedEvent event) {  
      //須要執行的邏輯代碼,當spring容器初始化完成後就會執行該方法。  
 }  
}

在ApplicationListener<ContextRefreshedEvent>使用時,會存在一個問題,在web 項目中(spring mvc),系統會存在兩個容器,一個是root application context ,另外一個就是咱們本身的 projectName-servlet  context(做爲root application context的子容器)。這種狀況下,就會形成onApplicationEvent方法被執行兩次。解決此問題的方法以下:java

方法一web

直接經過註解方式註解bean 其執行一次,不然執行兩次。spring

package com.becom.cs;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
/*直接經過註解方式註解bean*/
@Service  
public class InstantiationTracingBeanPostProcessor implements ApplicationListener<ContextRefreshedEvent>{
	
	@Autowired
	private DYXConsumeService dYXConsumeService;
	
	@Override
	public void onApplicationEvent(ContextRefreshedEvent event) {
		System.out.println('123456');
	}

}

方法二mvc

@Override  
  public void onApplicationEvent(ContextRefreshedEvent event) {  
    if(event.getApplicationContext().getParent() == null){//root application context 沒有parent
         //須要執行的邏輯代碼,當spring容器初始化完成後就會執行該方法。  
    }  
  }

咱們能夠只在root application context初始化完成後調用邏輯代碼,其餘的容器的初始化完成,則不作任何處理,上面是執行代碼。app

方法三ide

能夠我的設置判斷條件,在執行一次後,執行條件置爲false,使其第二次不執行。code

 

相關文章:http://www.iteye.com/problems/90629ci

相關文章
相關標籤/搜索