Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

缓存问题 #13

Closed
3 tasks
su-yh opened this issue Jan 6, 2023 · 1 comment · Fixed by #16
Closed
3 tasks

缓存问题 #13

su-yh opened this issue Jan 6, 2023 · 1 comment · Fixed by #16

Comments

@su-yh
Copy link

su-yh commented Jan 6, 2023

描述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

复现

通过如下步骤可以复现:

期望

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

截图

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

额外的细节和日志

  • 版本:
  • 错误日志
  • 配置:
  • 平台和操作系统
@nobodyiam
Copy link
Member

当不存在时,就新那一个返回出去,但是这个新建的对象并没有保存下来,也就是说当我多次调用时,返回的是不同的实例对象

这确实是个 bug

其次没有加锁

这个方法是 postProcessBeanFactory 调用的,不会有并发问题,所以不需要加锁

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants