1 /* 2 * Copyright 2002-2007 the original author or authors. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package org.springframework.context; 18 19 import org.springframework.beans.factory.HierarchicalBeanFactory; 20 import org.springframework.beans.factory.ListableBeanFactory; 21 import org.springframework.beans.factory.config.AutowireCapableBeanFactory; 22 import org.springframework.core.io.support.ResourcePatternResolver; 23 24 /** 25 * Central interface to provide configuration for an application. 26 * This is read-only while the application is running, but may be 27 * reloaded if the implementation supports this. 28 * 29 * <p>An ApplicationContext provides: 30 * <ul> 31 * <li>Bean factory methods for accessing application components. 32 * Inherited from {@link org.springframework.beans.factory.ListableBeanFactory}. 33 * <li>The ability to load file resources in a generic fashion. 34 * Inherited from the {@link org.springframework.core.io.ResourceLoader} interface. 35 * <li>The ability to publish events to registered listeners. 36 * Inherited from the {@link ApplicationEventPublisher} interface. 37 * <li>The ability to resolve messages, supporting internationalization. 38 * Inherited from the {@link MessageSource} interface. 39 * <li>Inheritance from a parent context. Definitions in a descendant context 40 * will always take priority. This means, for example, that a single parent 41 * context can be used by an entire web application, while each servlet has 42 * its own child context that is independent of that of any other servlet. 43 * </ul> 44 * 45 * <p>In addition to standard {@link org.springframework.beans.factory.BeanFactory} 46 * lifecycle capabilities, ApplicationContext implementations detect and invoke 47 * {@link ApplicationContextAware} beans as well as {@link ResourceLoaderAware}, 48 * {@link ApplicationEventPublisherAware} and {@link MessageSourceAware} beans. 49 * 50 * @author Rod Johnson 51 * @author Juergen Hoeller 52 * @see ConfigurableApplicationContext 53 * @see org.springframework.beans.factory.BeanFactory 54 * @see org.springframework.core.io.ResourceLoader 55 */ 56 public interface ApplicationContext extends ListableBeanFactory, HierarchicalBeanFactory, 57 MessageSource, ApplicationEventPublisher, ResourcePatternResolver { 58 59 /** 60 * Return the parent context, or <code>null</code> if there is no parent 61 * and this is the root of the context hierarchy. 62 * @return the parent context, or <code>null</code> if there is no parent 63 */ 64 ApplicationContext getParent(); 65 66 /** 67 * Expose AutowireCapableBeanFactory functionality for this context. 68 * <p>This is not typically used by application code, except for the purpose 69 * of initializing bean instances that live outside the application context, 70 * applying the Spring bean lifecycle (fully or partly) to them. 71 * <p>Alternatively, the internal BeanFactory exposed by the 72 * {@link ConfigurableApplicationContext} interface offers access to the 73 * AutowireCapableBeanFactory interface too. The present method mainly 74 * serves as convenient, specific facility on the ApplicationContext 75 * interface itself. 76 * @return the AutowireCapableBeanFactory for this context 77 * @throws IllegalStateException if the context does not support 78 * the AutowireCapableBeanFactory interface or does not hold an autowire-capable 79 * bean factory yet (usually if <code>refresh()</code> has never been called) 80 * @see ConfigurableApplicationContext#refresh() 81 * @see ConfigurableApplicationContext#getBeanFactory() 82 */ 83 AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException; 84 85 /** 86 * Return a friendly name for this context. 87 * @return a display name for this context 88 */ 89 String getDisplayName(); 90 91 /** 92 * Return the timestamp when this context was first loaded. 93 * @return the timestamp (ms) when this context was first loaded 94 */ 95 long getStartupDate(); 96 97 } 98