无论如何要从所有 spring bean 注释中获取 "Effective Spring Config"?

Is there anyway to get "Effective Spring Config" from all spring beans annotations?

我喜欢用于 bean 声明等的注释。但是现在我们有这么多有顺序的 bean (@Depends)。很难维护或一目了然地配置。

是否有任何工具可以根据您所有的 bean 注释提供 "Effective Spring Config" 信息?

答案:您不应该使用那么多 @DependsOn 注释。

来自 javadoc:

Used infrequently in cases where a bean does not explicitly depend on another through properties or constructor arguments, but rather depends on the side effects of another bean's initialization.

你可以这样做:

@Configuration
public class MyConfig {

   @Bean
   public MovieClient movieClient(RestOperations rest) {
       return new MovieClientImpl(rest);
   }

   @Bean
   public RestOperations restOps() {
       return new RestTemplate();
   }

}

在此示例中,RestOperations bean 将在 MovieClient bean 之前被实例化,只是因为 movieClient bean 请求它在构造函数中。在这种情况下,您不需要任何 @DependsOn 注释。


编辑:正如 OP 评论的那样,仍然存在显示 "Effective Spring Config" 的问题。

我认为没有任何工具可以做到这一点,因为您的依赖项可能会在运行时发生变化(因为自动配置、@Conditional 注释、配置文件等?)。

如果您需要知道您的 "Effective Spring Config"(即 "what beans are present at runtime"),您可以这样做:

ConfigurableApplicationContest context;
context = SpringApplication.run(Application.class, finalArgs);
// Print all the beans:
System.out.println(context.getBeanDefinitionNames());

但是,如果您的意思是如何查看和导航所有配置,您可以将 bean 组织在不同的 @Configuration 文件中,使用 @ComponentScan,并使用 Eclipse 的 Spring IDE 插件导航它们,如下所示: