spring查找未注入其他bean的bean

hs1ihplo  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(444)

  我想找到所有没有注入其他bean的bean,这样我就可以移除它们,使spring启动更快。有什么想法吗?提前谢谢。

jq6vz3qz

jq6vz3qz1#

在configurablebeanfactory#getdependentbeans javadoc中,我看到有一个方法可以调用,以获得一个bean数组,该数组依赖于我们提供的bean名称。追溯到我们如何得到豆子工厂。如果你能得到一个 GenericApplicationContext :
从上下文中获取bean工厂。
遍历bean工厂中的bean定义名称。
呼叫 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,但是它所拥有的请求Map方法显然是以某种方式被执行和引用的。

相关问题