繁体   English   中英

Spring 找到没有注入其他bean的bean

[英]Spring find beans that are not injected into other beans

我想找到所有没有注入其他 bean 的 bean,因此我可以删除它们以使 spring 启动更快。 有任何想法吗? 提前致谢。

ConfigurableBeanFactory#getDependentBeans Javadoc中,我看到我们可以调用一个方法来获取依赖于我们提供的 bean 名称的 bean 数组。 回溯到我们如何获得 bean factory。 如果您可以掌握GenericApplicationContext ,您可能会执行以下操作:

  1. 从上下文中获取 bean 工厂。
  2. 遍历 bean 工厂中的 bean 定义名称。
  3. 调用ConfigurableBeanFactory::getDependentBeans以查看是否有任何依赖它。
@Component
public class Example {
   @EventListener
   public void contextRefreshed(ContextRefreshedEvent event) {
      // Could also just autowire the context directly 
      GenericApplicationContext context = (GenericApplicationContext) event.getApplicationContext();
      ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();

      String[] beanNames = beanFactory.getBeanDefinitionNames();
      for(String beanName : beanNames) {
         String[] dependentBeanNames = beanFactory.getDependentBeans(beanName);
        
         if (dependentBeanNames.length <= 0) {
            // bean with nothing depending on it
         }
      }
   }
}

编辑:这个解决方案并不完美,但作为一个起点可能会很有用。 有些 bean 可能没有任何依赖,但在应用程序中使用。 一个很好的例子是你的控制器(用@Controller注释的类)。 根据我的测试,它有 0 个依赖 bean,但它所拥有的请求映射方法显然正在以某种方式执行和引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM