org.springframework.context.ConfigurableApplicationContext#refresh ( )源码实例Demo

下面列出了org.springframework.context.ConfigurableApplicationContext#refresh ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

/**
 * Return the {@code WebApplicationContext} passed in at construction time, if available.
 * Otherwise, attempt to retrieve a {@code WebApplicationContext} from the
 * {@code ServletContext} attribute with the {@linkplain #setContextAttribute
 * configured name} if set. Otherwise look up a {@code WebApplicationContext} under
 * the well-known "root" application context attribute. The
 * {@code WebApplicationContext} must have already been loaded and stored in the
 * {@code ServletContext} before this filter gets initialized (or invoked).
 * <p>Subclasses may override this method to provide a different
 * {@code WebApplicationContext} retrieval strategy.
 * @return the {@code WebApplicationContext} for this proxy, or {@code null} if not found
 * @see #DelegatingFilterProxy(String, WebApplicationContext)
 * @see #getContextAttribute()
 * @see WebApplicationContextUtils#getWebApplicationContext(javax.servlet.ServletContext)
 * @see WebApplicationContext#ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE
 */
@Nullable
protected WebApplicationContext findWebApplicationContext() {
	if (this.webApplicationContext != null) {
		// The user has injected a context at construction time -> use it...
		if (this.webApplicationContext instanceof ConfigurableApplicationContext) {
			ConfigurableApplicationContext cac = (ConfigurableApplicationContext) this.webApplicationContext;
			if (!cac.isActive()) {
				// The context has not yet been refreshed -> do so before returning it...
				cac.refresh();
			}
		}
		return this.webApplicationContext;
	}
	String attrName = getContextAttribute();
	if (attrName != null) {
		return WebApplicationContextUtils.getWebApplicationContext(getServletContext(), attrName);
	}
	else {
		return WebApplicationContextUtils.findWebApplicationContext(getServletContext());
	}
}
 
@Test
public void fileSystemXmlApplicationContext() throws IOException {
	ClassPathResource xml = new ClassPathResource(XML_PATH);
	File tmpFile = File.createTempFile("test", "xml");
	FileCopyUtils.copy(xml.getFile(), tmpFile);

	// strange - FSXAC strips leading '/' unless prefixed with 'file:'
	ConfigurableApplicationContext ctx =
			new FileSystemXmlApplicationContext(new String[] {"file:" + tmpFile.getPath()}, false);
	ctx.setEnvironment(prodEnv);
	ctx.refresh();
	assertEnvironmentBeanRegistered(ctx);
	assertHasEnvironment(ctx, prodEnv);
	assertEnvironmentAwareInvoked(ctx, ctx.getEnvironment());
	assertThat(ctx.containsBean(DEV_BEAN_NAME), is(false));
	assertThat(ctx.containsBean(PROD_BEAN_NAME), is(true));
}
 
@Test
public void fileSystemXmlApplicationContext() throws IOException {
	ClassPathResource xml = new ClassPathResource(XML_PATH);
	File tmpFile = File.createTempFile("test", "xml");
	FileCopyUtils.copy(xml.getFile(), tmpFile);

	// strange - FSXAC strips leading '/' unless prefixed with 'file:'
	ConfigurableApplicationContext ctx =
			new FileSystemXmlApplicationContext(new String[] {"file:" + tmpFile.getPath()}, false);
	ctx.setEnvironment(prodEnv);
	ctx.refresh();
	assertEnvironmentBeanRegistered(ctx);
	assertHasEnvironment(ctx, prodEnv);
	assertEnvironmentAwareInvoked(ctx, ctx.getEnvironment());
	assertThat(ctx.containsBean(DEV_BEAN_NAME), is(false));
	assertThat(ctx.containsBean(PROD_BEAN_NAME), is(true));
}
 
public static void main(String[] args) {
	ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("factory.bean/factory-post-processor.xml");
	BeanFactoryPostProcessor beanFactoryPostProcessor = (BeanFactoryPostProcessor) context.getBean("carPostProcessor");
	beanFactoryPostProcessor.postProcessBeanFactory(context.getBeanFactory());
	// 输出 :Car{maxSpeed=0, brand='*****', price=10000.0},敏感词被替换了
	System.out.println(context.getBean("car"));

	// 硬编码 后处理器执行时间
	BeanFactoryPostProcessor hardCodeBeanFactoryPostProcessor = new HardCodeBeanFactoryPostProcessor();
	context.addBeanFactoryPostProcessor(hardCodeBeanFactoryPostProcessor);
	// 更新上下文
	context.refresh();
	// 输出 :
	// Hard Code BeanFactory Post Processor execute time
	// Car{maxSpeed=0, brand='*****', price=10000.0}
	System.out.println(context.getBean("car"));
}
 
@Test
public void repro() {
	ConfigurableApplicationContext parent = new GenericApplicationContext();
	parent.refresh();

	AnnotationConfigApplicationContext child = new AnnotationConfigApplicationContext();
	child.setParent(parent);
	child.refresh();

	ConfigurableEnvironment env = child.getBean(ConfigurableEnvironment.class);
	assertThat("unknown env", env, anyOf(
			sameInstance(parent.getEnvironment()),
			sameInstance(child.getEnvironment())));
	assertThat("expected child ctx env", env, sameInstance(child.getEnvironment()));

	child.close();
	parent.close();
}
 
@Test
public void fileSystemXmlApplicationContext() throws IOException {
	ClassPathResource xml = new ClassPathResource(XML_PATH);
	File tmpFile = File.createTempFile("test", "xml");
	FileCopyUtils.copy(xml.getFile(), tmpFile);

	// strange - FSXAC strips leading '/' unless prefixed with 'file:'
	ConfigurableApplicationContext ctx =
			new FileSystemXmlApplicationContext(new String[] {"file:" + tmpFile.getPath()}, false);
	ctx.setEnvironment(prodEnv);
	ctx.refresh();
	assertEnvironmentBeanRegistered(ctx);
	assertHasEnvironment(ctx, prodEnv);
	assertEnvironmentAwareInvoked(ctx, ctx.getEnvironment());
	assertThat(ctx.containsBean(DEV_BEAN_NAME), is(false));
	assertThat(ctx.containsBean(PROD_BEAN_NAME), is(true));
}
 
源代码7 项目: lams   文件: DelegatingFilterProxy.java
/**
 * Return the {@code WebApplicationContext} passed in at construction time, if available.
 * Otherwise, attempt to retrieve a {@code WebApplicationContext} from the
 * {@code ServletContext} attribute with the {@linkplain #setContextAttribute
 * configured name} if set. Otherwise look up a {@code WebApplicationContext} under
 * the well-known "root" application context attribute. The
 * {@code WebApplicationContext} must have already been loaded and stored in the
 * {@code ServletContext} before this filter gets initialized (or invoked).
 * <p>Subclasses may override this method to provide a different
 * {@code WebApplicationContext} retrieval strategy.
 * @return the {@code WebApplicationContext} for this proxy, or {@code null} if not found
 * @see #DelegatingFilterProxy(String, WebApplicationContext)
 * @see #getContextAttribute()
 * @see WebApplicationContextUtils#getWebApplicationContext(javax.servlet.ServletContext)
 * @see WebApplicationContext#ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE
 */
protected WebApplicationContext findWebApplicationContext() {
	if (this.webApplicationContext != null) {
		// The user has injected a context at construction time -> use it...
		if (this.webApplicationContext instanceof ConfigurableApplicationContext) {
			ConfigurableApplicationContext cac = (ConfigurableApplicationContext) this.webApplicationContext;
			if (!cac.isActive()) {
				// The context has not yet been refreshed -> do so before returning it...
				cac.refresh();
			}
		}
		return this.webApplicationContext;
	}
	String attrName = getContextAttribute();
	if (attrName != null) {
		return WebApplicationContextUtils.getWebApplicationContext(getServletContext(), attrName);
	}
	else {
		return WebApplicationContextUtils.findWebApplicationContext(getServletContext());
	}
}
 
源代码8 项目: sakai   文件: SpringBeanLocatorTest.java
@Test
public void testWait() throws InterruptedException {
    ConfigurableApplicationContext context = new GenericApplicationContext();
    ConfigurableListableBeanFactory factory = context.getBeanFactory();
    Object bean = new Object();
    factory.registerSingleton("test", bean);
    context.refresh();
    Locator get1 = new Locator(SpringBeanLocator.getInstance());
    Locator get2 = new Locator(SpringBeanLocator.getInstance());
    get1.start();
    get2.start();

    // Increase the chances that the other threads will have run
    Thread.yield();

    SpringBeanLocator.setApplicationContext(context);
    get1.join(10000);
    get2.join(10000);
    // Cross thread assertions
    Assert.assertTrue(get1.good);
    Assert.assertTrue(get2.good);
}
 
源代码9 项目: msf4j   文件: MSF4JSpringApplication.java
public static ConfigurableApplicationContext run(Class sources, String... args) {
    MSF4JSpringApplication application = new MSF4JSpringApplication(sources);
    ConfigurableApplicationContext context = application.run(false, args);
    application.applyInitializers(context);
    context.refresh();
    return context;
}
 
@Test
public void genericApplicationContext_standardEnv() {
	ConfigurableApplicationContext ctx = new GenericApplicationContext(newBeanFactoryWithEnvironmentAwareBean());
	ctx.refresh();

	assertHasStandardEnvironment(ctx);
	assertEnvironmentBeanRegistered(ctx);
	assertEnvironmentAwareInvoked(ctx, ctx.getEnvironment());
}
 
/**
 * Refresh the given application context, if necessary.
 */
protected void refreshApplicationContext(ApplicationContext context) {
	if (context instanceof ConfigurableApplicationContext) {
		ConfigurableApplicationContext cac = (ConfigurableApplicationContext) context;
		if (!cac.isActive()) {
			cac.refresh();
		}
	}
}
 
@Test
public void genericApplicationContext_standardEnv() {
	ConfigurableApplicationContext ctx = new GenericApplicationContext(newBeanFactoryWithEnvironmentAwareBean());
	ctx.refresh();

	assertHasStandardEnvironment(ctx);
	assertEnvironmentBeanRegistered(ctx);
	assertEnvironmentAwareInvoked(ctx, ctx.getEnvironment());
}
 
private void assertFactoryCountThroughoutLifecycle(ConfigurableApplicationContext ctx) throws Exception {
	assertThat(serializableFactoryCount(), equalTo(0));
	try {
		ctx.refresh();
		assertThat(serializableFactoryCount(), equalTo(1));
		ctx.close();
	}
	catch (BeanCreationException ex) {
		// ignore - this is expected on refresh() for failure case tests
	}
	finally {
		assertThat(serializableFactoryCount(), equalTo(0));
	}
}
 
/**
 * Refresh the given application context, if necessary.
 */
protected void refreshApplicationContext(ApplicationContext context) {
	if (context instanceof ConfigurableApplicationContext) {
		ConfigurableApplicationContext cac = (ConfigurableApplicationContext) context;
		if (!cac.isActive()) {
			cac.refresh();
		}
	}
}
 
源代码15 项目: org.openwms   文件: ApplicationInitializer.java
/**
 * {@inheritDoc}
 * <p>
 * Depending on the underlying platform, different Spring profiles are included.
 */
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
    String activeProfile = System.getProperty("spring.profiles.active");
    if (SpringProfiles.OSGI.equalsIgnoreCase(activeProfile)) {
        LOGGER.info("Running in OSGI environment");
    } else if (SpringProfiles.NON_OSGI.equalsIgnoreCase(activeProfile)) {
        LOGGER.info("Running in a non OSGI environment");
    } else {
        applicationContext.getEnvironment().setActiveProfiles(SpringProfiles.NON_OSGI);
        applicationContext.refresh();
        LOGGER.info("Switched to a non OSGI environment");
    }
}
 
@Test
public void genericApplicationContext_standardEnv() {
	ConfigurableApplicationContext ctx = new GenericApplicationContext(newBeanFactoryWithEnvironmentAwareBean());
	ctx.refresh();

	assertHasStandardEnvironment(ctx);
	assertEnvironmentBeanRegistered(ctx);
	assertEnvironmentAwareInvoked(ctx, ctx.getEnvironment());
}
 
@Test
public void classPathXmlApplicationContext() {
	ConfigurableApplicationContext ctx = new ClassPathXmlApplicationContext(XML_PATH);
	ctx.setEnvironment(prodEnv);
	ctx.refresh();

	assertEnvironmentBeanRegistered(ctx);
	assertHasEnvironment(ctx, prodEnv);
	assertEnvironmentAwareInvoked(ctx, ctx.getEnvironment());
	assertThat(ctx.containsBean(DEV_BEAN_NAME), is(false));
	assertThat(ctx.containsBean(PROD_BEAN_NAME), is(true));
}
 
public static void main(String[] args) {
    // 创建 ConfigurableApplicationContext 实例 GenericApplicationContext
    ConfigurableApplicationContext context = new GenericApplicationContext();
    System.out.println("创建 Spring 应用上下文 : " + context.getDisplayName());
    // 添加 ApplicationListener 非泛型实现
    context.addApplicationListener(event ->
            System.out.println(event.getClass().getSimpleName())
    );

    // refresh() : 初始化应用上下文
    System.out.println("应用上下文准备初始化...");
    context.refresh(); // 发布 ContextRefreshedEvent
    System.out.println("应用上下文已初始化...");

    // stop() : 停止应用上下文
    System.out.println("应用上下文准备停止启动...");
    context.stop();    // 发布 ContextStoppedEvent
    System.out.println("应用上下文已停止启动...");

    // start(): 启动应用上下文
    System.out.println("应用上下文准备启动启动...");
    context.start();  // 发布 ContextStartedEvent
    System.out.println("应用上下文已启动启动...");

    // close() : 关闭应用上下文
    System.out.println("应用上下文准备关闭...");
    context.close();  // 发布 ContextClosedEvent
    System.out.println("应用上下文已关闭...");

}
 
private void assertFactoryCountThroughoutLifecycle(ConfigurableApplicationContext ctx) throws Exception {
	assertThat(serializableFactoryCount(), equalTo(0));
	try {
		ctx.refresh();
		assertThat(serializableFactoryCount(), equalTo(1));
		ctx.close();
	} catch (BeanCreationException ex) {
		// ignore - this is expected on refresh() for failure case tests
	} finally {
		assertThat(serializableFactoryCount(), equalTo(0));
	}
}
 
源代码20 项目: sakai   文件: TestComponentManagerContainer.java
/**
 * create a component manager based on a list of component.xml
 * @param configPaths a ';' seperated list of xml bean config files
 * @throws IOException
 */
public TestComponentManagerContainer(String configPaths, Properties props)  throws IOException {
	// we assume that all the jars are in the same classloader, so this will
	// not check for
	// incorrect bindings and will not fully replicate the tomcat
	// experience, but is an easier environment
	// to work within for kernel testing.
	// For a more complex structure we could use the kernel poms in the repo
	// to generate the dep list.
	if ( ComponentManager.m_componentManager != null ) {
		log.info("Closing existing Component Manager ");
		/*			
			try {
			ComponentManager.m_componentManager.close();
		} catch ( Throwable t ) {
			log.warn("Close Failed with message, safe to ignore "+t.getMessage());
		}
		*/
		log.info("Closing Complete ");
		ComponentManager.m_componentManager = null;
	}
	
	log.info("Starting Component Manager with ["+configPaths+"]");
	ComponentManager.setLateRefresh(true);

	componentManager = (SpringCompMgr) ComponentManager.getInstance();
	ConfigurableApplicationContext ac = componentManager.getApplicationContext();
	ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
	// Supply any additional configuration.
	if (props != null) {
		PropertyOverrideConfigurer beanFactoryPostProcessor = new PropertyOverrideConfigurer();
		beanFactoryPostProcessor.setBeanNameSeparator("@");
		beanFactoryPostProcessor.setProperties(props);
		ac.addBeanFactoryPostProcessor(beanFactoryPostProcessor);
	}

	// we could take the kernel bootstrap from from the classpath in future
	// rather than from
	// the filesystem

	List<Resource> config = new ArrayList<Resource>();
	String[] configPath = configPaths.split(";");
	for ( String p : configPath) {
		File xml = new File(p);
		config.add(new FileSystemResource(xml.getCanonicalPath()));
	}
	loadComponent(ac, config, classLoader);
	
	ac.refresh();

	// SAK-20908 - band-aid for TLM sync issues causing tests to fail
	// This sleep shouldn't be needed but it seems these tests are starting before ThreadLocalManager has finished its startup.
       try {
           Thread.sleep(500); // 1/2 second
           log.debug("Finished starting the component manager");
       } catch (InterruptedException e) {
           log.error("Component manager startup interrupted...");
       }
}