/** * Dianping.com Inc. * Copyright (c) 2003-2013 All Rights Reserved. */ package com.dianping.pigeon.container; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public final class SpringContainer { private String DEFAULT_SPRING_CONFIG = "classpath*:META-INF/spring/*.xml"; private static ClassPathXmlApplicationContext context; private static volatile boolean isStartup = false; public SpringContainer() { } public SpringContainer(String path) { DEFAULT_SPRING_CONFIG = path; } public ClassPathXmlApplicationContext getContext() { return context; } public void setParentContext(ApplicationContext parentContext) { context.setParent(parentContext); } public Object getBean(String beanName) { return context.getBean(beanName); } public void start() { if (!isStartup) { synchronized (this) { if (!isStartup) { String configPath = DEFAULT_SPRING_CONFIG; try { context = new ClassPathXmlApplicationContext(configPath.split("[,\\s]+")); context.start(); } catch (Throwable e) { throw new RuntimeException("error while start spring context:" + configPath, e); } } } } } public void stop() { try { if (context != null) { context.stop(); context.close(); context = null; } } catch (Exception e) { } } }