??通过XmlWebApplicationContext可以发现这个类的继承体系如下图所示:
??实现了相当多的接口,我们首先从BeanFactory看起。
?
?
BeanFactory是一个访问Spring容器的根节点,是一个Bean容器的最基本功能的定义
?
public interface BeanFactory { /** *用来访问BeanFactory本身的bean名称的前缀 */ String FACTORY_BEAN_PREFIX = "&"; /** *返回指定名称的Bean实例 */ Object getBean(String name) throws BeansException; /** *返回指定名称和类型的Bean实例 */ <T> T getBean(String name, Class<T> requiredType) throws BeansException; /** * 返回指定类型的Bean实例 */ <T> T getBean(Class<T> requiredType) throws BeansException; /** *可变参数主要用来指定是否显示使用静态工厂方法创建一个原型(prototype)Bean。 */ Object getBean(String name, Object... args) throws BeansException; /** *判断BeanFactory中是否包含指定名称的Bean */ boolean containsBean(String name); /** *判断指定名称的Bean是否是单例模式的Bean */ boolean isSingleton(String name) throws NoSuchBeanDefinitionException; /** *判断指定名称的Bean是否是原型类型的Bean */ boolean isPrototype(String name) throws NoSuchBeanDefinitionException; /** * 判断指定名称的Bean的类型和指定的类型是否匹配 */ boolean isTypeMatch(String name, Class<?> targetType) throws NoSuchBeanDefinitionException; /** * 返回指定名称的Bean的类型 */ Class<?> getType(String name) throws NoSuchBeanDefinitionException; /** * 获取指定名称的Bean的所有别名 */ String[] getAliases(String name); }
?
HierarchicalBeanFactory是的BeanFactory具有了层次结构,具备了管理双亲IOC容器的功能
public interface HierarchicalBeanFactory extends BeanFactory { /** * 返回上一级BeanFatory,如果没有则返回null */ BeanFactory getParentBeanFactory(); /** * 返回本地BeanFactory中是否包含指定Bean名称的Bean,忽略在上一级BeanFactory中的bean */ boolean containsLocalBean(String name); }
?LisableBeanFactory接口继承了BeanFactory接口,一次预加载所有的bean配置
public interface ListableBeanFactory extends BeanFactory { /** * 判断是否包含指定名称的bean的配置 */ boolean containsBeanDefinition(String beanName); /** *获取容器中bean的数量 */ int getBeanDefinitionCount(); /** * 获取所有Bean的名称 */ String[] getBeanDefinitionNames(); /** *获取所有指定类型的bean的名称 */ String[] getBeanNamesForType(Class<?> type); /** * 获取所有指定类型的bean的名称 */ String[] getBeanNamesForType(Class<?> type, boolean includeNonSingletons, boolean allowEagerInit); /** * 获取所有指定类型的Bean的映射, */ <T> Map<String, T> getBeansOfType(Class<T> type) throws BeansException; /** *查找所有具有指定注解类型的注解的bean */ <T> Map<String, T> getBeansOfType(Class<T> type, boolean includeNonSingletons, boolean allowEagerInit) throws BeansException; /** * 查找所有具有指定注解类型的注解的bean */ Map<String, Object> getBeansWithAnnotation(Class<? extends Annotation> annotationType) throws BeansException; /** * 查找指定Bean上指定注解类型的注解 */ <A extends Annotation> A findAnnotationOnBean(String beanName, Class<A> annotationType); }
?ApplicationEventPublisher?分装了一个发布ApplicationEvent的功能
public interface ApplicationEventPublisher { /** * 通知这个应用注册的所有监听器 */ void publishEvent(ApplicationEvent event); }
?MessageSource消息参数化和国际化支持接口
public interface MessageSource { String getMessage(String code, Object[] args, String defaultMessage, Locale locale); String getMessage(String code, Object[] args, Locale locale) throws NoSuchMessageException; String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException; }
?ApplicationContext
/** * 为应用提供配置的核心接口。在应用运行期间只读。 * ApplicationContext提供了如下功能: * 访问应用组件的BeanFactory方法,继承自ListableBeanFactory * 使用通用方式加载文件资源的能力,继承自ResourceLoader * 向注册的监听器发布事件的能力,继承自ApplicaitonEventPublisher * 支持消息国际化的能力,继承自MessageSource * 继承父上下文。子上下文定义优先于祖先上下文。 */ public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver { /** *返回这个应用上下文的唯一Id,如果没有则返回null */ String getId(); /** *获取应用上下文显示的名称 */ String getDisplayName(); /** * 返回应用上下文第一次加载的时间毫秒值 */ long getStartupDate(); /** * 获取父上下文,如果没有则返回null */ ApplicationContext getParent(); /** *返回AutoCapableBeanFactory,为这个上下文提供AutowireCapableBeanFactory功能 */ AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException; }
?
public interface ConfigurableApplicationContext extends ApplicationContext, Lifecycle { /** * 上下文配置路径的分割符 */ String CONFIG_LOCATION_DELIMITERS = ",; \t\n"; /** * ConversionService bean的名称 */ String CONVERSION_SERVICE_BEAN_NAME = "conversionService"; /** * LoadTimeWeaver Bean的名称 * */ String LOAD_TIME_WEAVER_BEAN_NAME = "loadTimeWeaver"; /** * 环境变量Bean的名称 */ String ENVIRONMENT_BEAN_NAME = "environment"; /** * 系统属性Bean的名称 */ String SYSTEM_PROPERTIES_BEAN_NAME = "systemProperties"; /** * 系统环境变量Bean的名称 */ String SYSTEM_ENVIRONMENT_BEAN_NAME = "systemEnvironment"; /** * 设置应用上下文唯一Id */ void setId(String id); /** * 设置父山下文 */ void setParent(ApplicationContext parent); /** * 获取环境变量 */ ConfigurableEnvironment getEnvironment(); /** * 设置环境变量 */ void setEnvironment(ConfigurableEnvironment environment); /** * 注册一个BeanFactoryPostProcessor */ void addBeanFactoryPostProcessor(BeanFactoryPostProcessor beanFactoryPostProcessor); /** * 注册一个ApplicationEvent监听器 */ void addApplicationListener(ApplicationListener<?> listener); /** *刷新应用上下文 */ void refresh() throws BeansException, IllegalStateException; /** * 注册一个JVM关闭的钩子,在关闭JVM时关闭应用上下文 */ void registerShutdownHook(); /** * 关闭应用上下文 */ void close(); /** * 判断应用上下文是否处于激活状态 */ boolean isActive(); /** * 返回次上下文内部BeanFactory */ ConfigurableListableBeanFactory getBeanFactory() throws IllegalStateException; }
?
XmlWebApplicationContext源码学习(一)
原文:http://zhangwei-david.iteye.com/blog/2223587