博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring源码 08 IOC refresh方法3
阅读量:37194 次
发布时间:2020-08-01

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

参考源

《Spring源码深度解析(第2版)》

版本

本文章基于 Spring 5.3.15


Spring IOC 的核心是 AbstractApplicationContextrefresh 方法。

其中一共有 13 个主要方法,这里分析第 3 个:prepareBeanFactory

1 AbstractApplicationContext

1-1 对 BeanFactory 进行功能填充

prepareBeanFactory(beanFactory)
protected void prepareBeanFactory(ConfigurableListableBeanFactory beanFactory) {   // 设置 beanFactory 的 classLoader 为当前 context 的 classLoader   beanFactory.setBeanClassLoader(getClassLoader());   if (!shouldIgnoreSpel) {      /**       * 设置bean Factory 的表达式语言处理桥, Spring3 增加了表达式语言的支持       * 默认可以使用 #{bean.xxx} 的形式来调用相关属性值       */      beanFactory.setBeanExpressionResolver(new StandardBeanExpressionResolver(beanFactory.getBeanClassLoader()));   }   // 为 beanFactory 增加了一个默认的 propertyEditor,这个主要是对 bean 的属性等设置管理的一个工具   beanFactory.addPropertyEditorRegistrar(new ResourceEditorRegistrar(this, getEnvironment()));   // 添加 Bean 增强器   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.ignoreDependencyInterface(ApplicationStartupAware.class);   // 设置自动装配的特殊规则   beanFactory.registerResolvableDependency(BeanFactory.class, beanFactory);   beanFactory.registerResolvableDependency(ResourceLoader.class, this);   beanFactory.registerResolvableDependency(ApplicationEventPublisher.class, this);   beanFactory.registerResolvableDependency(ApplicationContext.class, this);   // 添加 Bean 增强器   beanFactory.addBeanPostProcessor(new ApplicationListenerDetector(this));   // 增加对 AspectJ 的支持   if (!NativeDetector.inNativeImage() && beanFactory.containsBean(LOAD_TIME_WEAVER_BEAN_NAME)) {      beanFactory.addBeanPostProcessor(new LoadTimeWeaverAwareProcessor(beanFactory));      // 为类型匹配设置临时类加载器      beanFactory.setTempClassLoader(new ContextTypeMatchClassLoader(beanFactory.getBeanClassLoader()));   }   // 添加默认的系统环境 bean   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());   }   if (!beanFactory.containsLocalBean(APPLICATION_STARTUP_BEAN_NAME)) {      beanFactory.registerSingleton(APPLICATION_STARTUP_BEAN_NAME, getApplicationStartup());   }}

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

你可能感兴趣的文章
数字拆分问题算法回溯_学会了回溯算法,我终于会做数独了
查看>>
广州刷脸支付骗局_刷脸支付是骗局?那可能你还不了解刷脸支付
查看>>
卸载源码安装的mysql_源码安装与卸载mysql
查看>>
mysql查询当天记录_sql查询当天记录
查看>>
java 远程调试 端口_JAVA远程调试
查看>>
java 获取 html 图片路径_JAVA-替换html中图片的路径-从html代码中提取图片路径并下载(完整版)...
查看>>
java redis 面试题_Java面试题(Redis篇)
查看>>
java 正则表达式分类功能_JAVA正则表达式4种常用功能
查看>>
java3d立方体_3d立方体贴图
查看>>
java ajax教程_(转)JAVA AJAX教程第三章—AJAX详细讲解
查看>>
java operators_A guide to Java Operators
查看>>
java socket调试_JAVA实现SOCKET多客户端通信的案例
查看>>
java 使用或覆盖了已过时的api_JAVA使用或覆盖了已过时的 API
查看>>
java 图片旋转保存_Java 对图片90度旋转
查看>>
用java实现文学研究助手_数据结构文学研究助手 C语言代码实现(带源码+解析)...
查看>>
java gc的几种方式_GC 的三种基本实现方式
查看>>
wget linux java 32_通过wget在Linux上下载Java JDK会显示在许可证页面上
查看>>
babylonjs 设置面板位置_babylonjs 空间坐标转为屏幕坐标
查看>>
oracle里面如何查询sqlid,CSS_oracle中如何查看sql, --查询表状态:  select uo.O - phpStudy...
查看>>
oracle 查询中用case,oracle case when 在查询时候的用法。
查看>>