【知识库】--spring ApplicationContext 功能的扩展起始点-prepareBeanFactory(241)

来源:互联网 发布:eve冬眠者数据库 编辑:程序博客网 时间:2024/05/22 04:35

ApplicationContext扩展开始ing



 /**     * 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.         beanFactory.setBeanClassLoader(getClassLoader());         //主要是在解析依赖注入bean的时候,以及在完成bean的初始化和属性获取后进行属性填充的时候         beanFactory.setBeanExpressionResolver(new StandardBeanExpressionResolver());         //表达式语言处理器默认可以使用#{bean.xx}         beanFactory.addPropertyEditorRegistrar(new ResourceEditorRegistrar(this, getEnvironment()));         //bean属性设置管理的工具 通用的属性编辑器 如Class URL 等。自定义属性编辑器:只需要实现 PropertyEditorRegistrar接口即可(最终会被AbstractBeanFactory持用) 或者 xml注入到CustomEditorConfigurer中的customEditors Map中。等待初始化beanWrapper时调用initBeanWrapper触发。                //Configure the bean factory with context callbacks.// Configure the bean factory with context callbacks.beanFactory.addBeanPostProcessor(new ApplicationContextAwareProcessor(this));beanFactory.ignoreDependencyInterface(ResourceLoaderAware.class);beanFactory.ignoreDependencyInterface(ApplicationEventPublisherAware.class);beanFactory.ignoreDependencyInterface(MessageSourceAware.class);beanFactory.ignoreDependencyInterface(ApplicationContextAware.class);beanFactory.ignoreDependencyInterface(EnvironmentAware.class);// BeanFactory interface not registered as resolvable type in a plain factory.// MessageSource registered (and found for autowiring) as a bean.beanFactory.registerResolvableDependency(BeanFactory.class, beanFactory);beanFactory.registerResolvableDependency(ResourceLoader.class, this);beanFactory.registerResolvableDependency(ApplicationEventPublisher.class, this);beanFactory.registerResolvableDependency(ApplicationContext.class, this);// Detect a LoadTimeWeaver and prepare for weaving, if found.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.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());}}
阅读全文
0 0
原创粉丝点击