Spring基础:在WebApplicationContext创建前和创建后调用方法

创建前

public class TimerWebContextListener extends ContextLoaderListener{
	private static Logger logger = LoggerFactory.getLogger(WebContextListener.class);
	
	@Override
	public WebApplicationContext initWebApplicationContext(
			ServletContext servletContext) {
		try {
			initProperties(servletContext);
	/*		logger.info("\r\n==========================线程组初始化开始===============================\r\n");
			//spring容器
			WebApplicationContext webApplicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
			//获取Spirng初始化的Workers
			List<ThreadConfigBean> workers = (List<ThreadConfigBean>) webApplicationContext.getBean("workers");
			logger.info("\r\n==========================线程组初始化完毕===============================\r\n");
			logger.info("\r\n==========================监控线程初始化开始===============================\r\n");
			ThreadGroupUtils.monitorThreadStart(group, 2000L);
			logger.info("\r\n==========================监控线程初始化完毕===============================\r\n");
			*/
		} catch (Exception e) {
			logger.error("加载配置文件失败......" + e);
		}
		if (!printKeyLoadMessage()) {
			return null;
		}
		return super.initWebApplicationContext(servletContext);
	}
创建后

public class TimerApplicationContextListener implements ApplicationListener<ContextRefreshedEvent>{

	@Override
	public void onApplicationEvent(ContextRefreshedEvent event) {
        if (event.getApplicationContext().getParent() == null) {// root  
            logger.info("*******************************");  
            logger.info("============spring 初始化完成===========");  
            logger.info("*******************************");  
            WebApplicationContext webApplicationContext = (WebApplicationContext) event.getApplicationContext();
            logger.info("\r\n==========================线程组初始化开始===============================\r\n");
			//获取Spirng初始化的Workers
			List<ThreadConfigBean> workers = (List<ThreadConfigBean>) webApplicationContext.getBean("workers");
			SecurityManager manager = System.getSecurityManager();
			ThreadGroup parent = (manager!= null) ? manager.getThreadGroup() : Thread.currentThread().getThreadGroup();
			ThreadGroup group = new ThreadGroup(parent, "root-threadgroup");
			//根据配置的bean初始化每个业务的线程池
			for(ThreadConfigBean tc : workers){
				//使用有界队列 设置大小
				ArrayBlockingQueue<Runnable> taskQueue = new ArrayBlockingQueue<Runnable>(tc.getQueueCapacity());
				//线程工厂创建
				ThreadFactory threadFactory = new ThreadFactoryWithBusiName(new ThreadGroup(group, tc.getBusiName()), tc.getBusiName());
				ThreadPoolExecutorWithBusiName threadPoolExecutorWithBusiName = 
						new ThreadPoolExecutorWithBusiName(tc.getBusiName(), tc.getMin(), tc.getMax(), tc.getKeepAliveTime(), TimeUnit.SECONDS, taskQueue, threadFactory, tc.getRejectHandler());
				ThreadGroupUtils.addThreadWorker(tc.getBusiName(), threadPoolExecutorWithBusiName);
			}
			logger.info("\r\n==========================线程组初始化完毕===============================\r\n");
			logger.info("\r\n==========================监控线程初始化开始===============================\r\n");
			ThreadGroupUtils.monitorThreadStart(group, 4000L);
			logger.info("\r\n==========================监控线程初始化完毕===============================\r\n");
        } 
	}

注意:如果想在ApplicationListener的实现类中引用初始化完成的bean

需要将这个实现类交给spring管理才能autowire。

此时都可以出去autowire的bean,所有的bean都已经被如期加载

两种方式

@Component

<bean id="" class=""/>

自选




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值