
Spring源码:prepareBeanFactory(beanFactory);方法
发布日期:2021-05-07 14:08:05
浏览次数:6
分类:原创文章
本文共 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()); }}
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年03月15日 20时06分25秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
全球数字货币加快研发
2019-03-04
数字化助力金融科技,实现产业良性循环
2019-03-04
2020-11-18(失败的一天)
2019-03-04
2020-11-23(彻底理解KMP)
2019-03-04
DMB DSB ISB 简介
2019-03-04
常用的IDC函数
2019-03-04
BUUCTF 新年快乐 内涵的软件 Java逆向解密 刮开有奖
2019-03-04
虎符杯——虚拟机逆向
2019-03-04
angr学习笔记(7)(malloc地址单元符号化)
2019-03-04
angr学习笔记(9)(添加约束)
2019-03-04
angr学习笔记(13)(static_binary)
2019-03-04
windows环境利用start命令实现微信多开
2019-03-04
「CF149D」括号涂色 区间DP好题
2019-03-04
树状数组 模板总结
2019-03-04
「NOI2015」程序自动分析 并查集题解
2019-03-04
[JSOI2008]Blue Mary的战役地图 Hash题解
2019-03-04
Ubuntu修改终端上显示的用户名和主机名(详细步骤)
2019-03-04
教你写一手漂亮的伪代码(详细规则&简单实例)
2019-03-04
MySQL的基本体系和架构介绍
2019-03-04
MySQL数据备份实践和整理
2019-03-04