博客
关于我
Spring源码:prepareBeanFactory(beanFactory);方法
阅读量:335 次
发布时间:2019-03-04

本文共 3617 字,大约阅读时间需要 12 分钟。

// Prepare the bean factory for use in this context.//添加一些 Spring 本身需要的一些工具类prepareBeanFactory(beanFactory);
/*** Configure the factory's standard context characteristics,* such as the context's ClassLoader and post-processors.* @param beanFactory the BeanFactory to configure*///配置工厂标准上下文的特征,例如上下文的类加载器和前置处理器protected void prepareBeanFactory(ConfigurableListableBeanFactory beanFactory) {   // Tell the internal bean factory to use the context's class loader etc.   //bean工厂设置类加载器   beanFactory.setBeanClassLoader(getClassLoader());   //创建一个新的StandardBeanExpressionResolver实例,此实例拥有类加载器的引用   //在bean定义的值中,此实例为表达式的使用指定解决策略,上下文通常会设置标准的表达式策略支持"#{...}"EL表达式,例如数据库信息的引用   beanFactory.setBeanExpressionResolver(new StandardBeanExpressionResolver(beanFactory.getBeanClassLoader()));   //创建一个新的ResourceEditorRegistrar自定义属性编辑器实例,此实例拥有类加载器和Environment的引用   //将这个ResourceEditorRegistrar实例添加到bean工厂的propertyEditorRegistrars属性中   //propertyEditorRegistrars是LinkedHashSet类型,定制自定义策略,来扩展propertyEditor,适用于所有bean的创建过程   //案例:一个重要的使用就是将xml中bean中的属性值注入到class对象中   beanFactory.addPropertyEditorRegistrar(new ResourceEditorRegistrar(this, getEnvironment()));   // Configure the bean factory with context callbacks.   //通过上下文回调配置bean工厂   //BeanPostProcessor(SF中特别重要的一个接口)允许我们自定义修改bean的属性,可以创建此接口的实现类,修改bean信息   //在bean工厂添加BeanPostProcessor处理器,用于创建bean(creatBean),BeanPostProcessor是CopyOnWriteArrayList类型,线程安全   beanFactory.addBeanPostProcessor(new ApplicationContextAwareProcessor(this));   beanFactory.ignoreDependencyInterface(EnvironmentAware.class);   beanFactory.ignoreDependencyInterface(EmbeddedValueResolverAware.class);   beanFactory.ignoreDependencyInterface(ResourceLoaderAware.class);   beanFactory.ignoreDependencyInterface(ApplicationEventPublisherAware.class);   beanFactory.ignoreDependencyInterface(MessageSourceAware.class);   beanFactory.ignoreDependencyInterface(ApplicationContextAware.class);   // BeanFactory interface not registered as resolvable type in a plain factory.   // MessageSource registered (and found for autowiring) as a bean.   //BeanFactory接口未在普通工厂中注册为可解析类型。   //MessageSource注册为bean(并发现用于自动装配)。   beanFactory.registerResolvableDependency(BeanFactory.class, beanFactory);   beanFactory.registerResolvableDependency(ResourceLoader.class, this);   beanFactory.registerResolvableDependency(ApplicationEventPublisher.class, this);   beanFactory.registerResolvableDependency(ApplicationContext.class, this);   // Register early post-processor for detecting inner beans as ApplicationListeners.   //注册早期的后处理器以将内部bean检测为ApplicationListeners。   beanFactory.addBeanPostProcessor(new ApplicationListenerDetector(this));   // Detect a LoadTimeWeaver and prepare for weaving, if found.   //如果发现LoadTimeWeaver,请准备编织。   if (beanFactory.containsBean(LOAD_TIME_WEAVER_BEAN_NAME)) {      beanFactory.addBeanPostProcessor(new LoadTimeWeaverAwareProcessor(beanFactory));      // Set a temporary ClassLoader for type matching.      //为类型匹配设置一个暂时的类加载器      beanFactory.setTempClassLoader(new ContextTypeMatchClassLoader(beanFactory.getBeanClassLoader()));   }   // Register default environment beans.   //注册默认的环境beans   if (!beanFactory.containsLocalBean(ENVIRONMENT_BEAN_NAME)) {      beanFactory.registerSingleton(ENVIRONMENT_BEAN_NAME, getEnvironment());   }   if (!beanFactory.containsLocalBean(SYSTEM_PROPERTIES_BEAN_NAME)) {      beanFactory.registerSingleton(SYSTEM_PROPERTIES_BEAN_NAME, getEnvironment().getSystemProperties());   }   if (!beanFactory.containsLocalBean(SYSTEM_ENVIRONMENT_BEAN_NAME)) {      beanFactory.registerSingleton(SYSTEM_ENVIRONMENT_BEAN_NAME, getEnvironment().getSystemEnvironment());   }}

 

转载地址:http://vzre.baihongyu.com/

你可能感兴趣的文章
Java集合Collection
查看>>
SpringMVC入门-概述和基本配置
查看>>
SpringBoot快速入门
查看>>
医疗管理系统-手机快速登录和SpringSecurity权限控制
查看>>
网页实现微信登录
查看>>
vue源码分析(MVVM篇)
查看>>
React(八)- ReactUI组件库及Redux的使用
查看>>
TypeScript系列(一)- TypeScript简介与编译配置
查看>>
TypeScript系列文章导航
查看>>
TypeScript系列(二)- Webpack打包TS代码
查看>>
Windows系统Git安装教程
查看>>
hibernate和mybatis的区别
查看>>
你为什么从大公司离职,去一家创业公司?
查看>>
MyBatis学习总结(三)——优化MyBatis配置文件中的配置
查看>>
JavaWeb学习总结(十三)——使用Session防止表单重复提交
查看>>
Java中Map的用法详解
查看>>
Java注解全面总结
查看>>
base64编码字符串和图片的互转
查看>>
汉字转为拼音
查看>>
Target runtime Apache Tomcat v7.0 is not defined.错误解决方法
查看>>