首页 > 移动平台 > 详细

XmlWebApplicationContext源码学习(一)

时间:2015-07-02 02:15:51      阅读:338      评论:0      收藏:0      [点我收藏+]

??通过XmlWebApplicationContext可以发现这个类的继承体系如下图所示:

??实现了相当多的接口,我们首先从BeanFactory看起。

?


bubuko.com,布布扣
?

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!