通过删除ConfigurationPostProcessor来优化spring应用程序上下文加载时间

时间:2016-08-31 11:48:37

标签: spring spring-annotations

这个问题针对的是那些对Spring的内部结构很熟悉/感兴趣的人。 Pivotal guys-我希望你能碰到这个。

我的应用程序使用spring DI。我们将基于注释的bean(如@Service和@component)与基于旧的基于xml的bean混合使用。

在某些时候,应用程序上下文的加载时间变得难以忍受(30-90秒),具体取决于开发人员的计算机。

我在加载应用程序上下文时运行了一个分析器,发现了一件有趣的事情:

它在org.springframework.context.annotation.ConfigurationClassPostProcessor内花费了大部分时间,特别是在processConfigBeanDefinitions中。

迭代候选人列表,检查是否使用“@Bean”或“@Configuration”或他们的任何伙伴进行注释。

我愿意放弃基于注释的配置,基于观察需要花费很多时间。

我找到了一种通过实现BeanDefinitionRegistryPostProcessor并删除org.springframework.context.annotation.internalConfigurationAnnotationProcessor来删除此后处理器的方法。实际上它显着加快了加载时间。

所以问题是:

  1. 这样安全吗?或者这是一个危险的黑客?
  2. 似乎这个类不尊重该部分中配置的包名称 - 它迭代了太多的候选者。那是为什么?
  3. 其他建议?

0 个答案:

没有答案