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

相关文章
相关标签/搜索