Spring核心容器IOC原理实例解析
这篇文章主要介绍了Spring核心容器IOC原理实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
一、BeanFactory
SpringBean的创建是典型的工厂模式,这一系列的Bean工厂,也即IOC容器为开发者管理对象
间的依赖关系提供了很多便利和基础服务。最基本的IOC容器接口BeanFactory,来看一下它的源码:
publicinterfaceBeanFactory{
//对FactoryBean的转义定义,因为如果使用bean的名字检索FactoryBean得到的对象是工厂生成的对象,
//如果需要得到工厂本身,需要转义
StringFACTORY_BEAN_PREFIX="&";
//根据bean的名字,获取在IOC容器中得到bean实例
ObjectgetBean(Stringname)throwsBeansException;
//根据bean的名字和Class类型来得到bean实例,增加了类型安全验证机制。
TgetBean(Stringname,@NullableClassrequiredType)throwsBeansException;
ObjectgetBean(Stringname,Object...args)throwsBeansException;
TgetBean(ClassrequiredType)throwsBeansException;
TgetBean(ClassrequiredType,Object...args)throwsBeansException;
//提供对bean的检索,看看是否在IOC容器有这个名字的bean
booleancontainsBean(Stringname);
//根据bean名字得到bean实例,并同时判断这个bean是不是单例
booleanisSingleton(Stringname)throwsNoSuchBeanDefinitionException;
booleanisPrototype(Stringname)throwsNoSuchBeanDefinitionException;
booleanisTypeMatch(Stringname,ResolvableTypetypeToMatch)throws
NoSuchBeanDefinitionException;
booleanisTypeMatch(Stringname,@NullableClass>typeToMatch)throws
NoSuchBeanDefinitionException;
//得到bean实例的Class类型
@Nullable
Class>getType(Stringname)throwsNoSuchBeanDefinitionException;
//得到bean的别名,如果根据别名检索,那么其原名也会被检索出来
String[]getAliases(Stringname);
}
二、BeanDefinition
SpringIOC容器管理了我们定义的各种Bean对象及其相互的关系,Bean对象在Spring实现中是
以BeanDefinition来描述的。
三、BeanDefinitionReader
Bean的解析主要就是对Spring配置文件的解析。这个解析过程主要通过
BeanDefintionReader来完成。
四、WebIOC容器初体验
IOC容器初始化以后,最后调用了DispatcherServlet的onRefresh()方法,在onRefresh()方法中又是直接调用initStrategies()方法初始化SpringMVC的九大组件:
/**
*Thisimplementationcalls{@link#initStrategies}.
*/
@Override
protectedvoidonRefresh(ApplicationContextcontext){
initStrategies(context);
}
/**
*Initializethestrategyobjectsthatthisservletuses.
*Maybeoverriddeninsubclassesinordertoinitializefurtherstrategyobjects.
*/
//初始化策略
protectedvoidinitStrategies(ApplicationContextcontext){
//多文件上传的组件
initMultipartResolver(context);
//初始化本地语言环境
initLocaleResolver(context);
//初始化模板处理器
initThemeResolver(context);
//handlerMapping
initHandlerMappings(context);
//初始化参数适配器
initHandlerAdapters(context);
//初始化异常拦截器
initHandlerExceptionResolvers(context);
//初始化视图预处理器
initRequestToViewNameTranslator(context);
//初始化视图转换器
initViewResolvers(context);
//
initFlashMapManager(context);
}
IOC容器初始化小结:
现在通过上面的代码,总结一下IOC容器初始化的基本步骤:
1.初始化的入口在容器中的refresh调用来完成。
2.对Bean定义载入IOC容器使用的方法是loadBeanDefinition。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。