Skip to content

缓存问题 #13

@su-yh

Description

@su-yh

描述bug
在apollo-client 模块里面,SpringValueDefinitionProcessor 中有如下代码块:

  public static Multimap<String, SpringValueDefinition> getBeanName2SpringValueDefinitions(BeanDefinitionRegistry registry) {
    Multimap<String, SpringValueDefinition> springValueDefinitions = beanName2SpringValueDefinitions.get(registry);
    if (springValueDefinitions == null) {
      springValueDefinitions = LinkedListMultimap.create();
    }

    return springValueDefinitions;
  }

这段代码我怎么看着有点迷糊,当不存在时,就新那一个返回出去,但是这个新建的对象并没有保存下来,也就是说当我多次调用时,返回的是不同的实例对象,那这段代码有什么意义呢?

其次没有加锁

对于目前来说似乎没有问题,但看样子是因为这里的调用总是不会返回null,因为SpringValueDefinitionProcessorBeanDefinitionRegistryPostProcessorSpringValueProcessorBeanFactoryPostProcessorBeanDefinitionRegistryPostProcessor 的运行优先级比BeanFactoryPostProcessor 高,所以在SpringValueDefinitionProcessor 已经初始化了,所以在SpringValueProcessor 中调用SpringValueDefinitionProcessor.getBeanName2SpringValueDefinitions(..) 这个方法的时候总是存在值了。

单看这一个方法它的逻辑是有问题的,但从spring 的整体机制来讲这个BUG 不会触发。

简洁明了地描述一下bug

复现

通过如下步骤可以复现:

期望

简介明了地描述你希望正常情况下应该发生什么

截图

如果可以,附上截图来描述你的问题

额外的细节和日志

  • 版本:
  • 错误日志
  • 配置:
  • 平台和操作系统

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions