博客
关于我
强烈建议你试试无所不能的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/

你可能感兴趣的文章
方法回调/钩子
查看>>
Java中常用缓存Cache机制的实现
查看>>
数据库设计规范化的 5 个要求
查看>>
手动启动 oracle 服务
查看>>
二 垃圾回收:第06讲:深入剖析:垃圾回收你真的了解吗?(下)
查看>>
ObjectMapper 的一些坑
查看>>
spring 几种获得bean的方法
查看>>
Server returns invalid timezone. Go to ‘Advanced‘ tab and set ‘serverTimezon‘
查看>>
SQL查询语句执行顺序详解
查看>>
如何避免创建不必要的对象
查看>>
老司机入职一周,给我们解读 Spring Boot 最流行的 16 条实践
查看>>
maven删除不必要的依赖;优化pom依赖研究
查看>>
2017 年你不能错过的 Java 类库
查看>>
Java笔记——面向切面编程(AOP模式)
查看>>
javaweb学习总结——获得MySQL数据库自动生成的主键
查看>>
【zabbix教程三】——centos7 安装zabbix客户端并监控
查看>>
MVC、MVP、MVVM之间的关系
查看>>
计算机网络--HTTP协议(二)
查看>>
Spring总结之注解(2)
查看>>
Java和JavaScript中使用Json方法大全
查看>>