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,@NullableClass requiredType)throwsBeansException; ObjectgetBean(Stringname,Object...args)throwsBeansException; TgetBean(Class requiredType)throwsBeansException; TgetBean(Class requiredType,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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。