这个问题针对的是那些对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来删除此后处理器的方法。实际上它显着加快了加载时间。
所以问题是: