有没有一种方法可以从所有Spring Beans注解中获取"Effective Spring Config"?

4

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

是否有任何工具可以根据您所有bean注解提供“有效的Spring配置”信息?


2
我建议您重新措辞,以便提出一个适当的问题。例如,“基于所有我的bean注释,如何获取“Effective Spring Config”信息?” 当不要求工具时,这可能是一个非常有用的帖子。 - ChiefTwoPencils
1个回答

3
答案:您不应该使用那么多的@DependsOn注释。根据javadoc的说明,@DependsOn注释很少使用,只有在一个bean不通过属性或构造函数参数明确依赖于另一个bean,而是依赖于另一个bean初始化的副作用时才使用。您可以这样做:
@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 注释。

编辑:正如楼主所评论的,仍然存在显示“有效Spring配置”的问题。

我不认为有任何工具可以解决这个问题,因为您的依赖关系可能会在运行时更改(由于自动配置、@Conditional注释、配置文件、其他原因?)。

如果您需要知道您的“有效Spring配置”(即“运行时存在哪些bean”),可以执行以下操作:

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

然而,如果你的意思是如何查看和导航所有配置,你可以将你的bean组织在不同的@Configuration文件中,使用@ComponentScan获取它们,并使用Spring IDE插件来导航它们,就像这样:

Navigate Spring Configuration


它仍然存在一个问题,即需要知道所有依赖项,因为它们都在单个真实文档中 :) - gpa
1
@gpa 不要把你所有的“beans”都放在一个“Configuration”文件中。你应该按照某些标准将它们分成不同的文件,例如MongoConfiguration类、MvcConfiguration类等。然后,一个单一的ComponentScan注释将加载它们所有(甚至解决相互依赖)。就这么简单 ;) - ESala
@gpa,我已经更新了我的回答,解决了知道所有依赖项的问题。 - ESala

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接