在SpringApplication
的Java文档中,提到:
SpringApplication
可以读取各种不同的bean 源。通常建议单@Configuration
class用于引导你的应用程序[...]
此声明是否意味着建议应用 只有一个@Configuration
类 ,或者是否建议通过已使用@Configuration
到SpringApplication
注释的类(例如,使用run
方法) - 对@Configuration
类的数量没有任何限制?
此外,我发现该陈述的其余部分难以解释:
[...]但是,也可以使用以下任何来源:
- 加载的Java类
Class
- 由AnnotatedBeanDefinitionReader
Resource
- 要由XmlBeanDefinitionReader
加载的XML资源,或者要加载的groovy脚本GroovyBeanDefinitionReader
- 扫描的Java包
Package
- 由ClassPathBeanDefinitionScanner
CharSequence
- 根据需要加载的类名,资源句柄或包名。如果CharSequence
无法解析 类并且不会解析为它将存在的Resource
被视为Package
。
虽然我以前使用SpringApplication.run
没有任何问题,但现在阅读它的JavaDocs描述让我完全糊涂了。
答案 0 :(得分:1)
这就是我理解的方式:
单个@Configuration类用于引导您的应用程序
您应该有一个@Configuration类,它是应用程序的根配置。
这使得配置更容易理解和调试。 当然,您可以使用@Import导入其他配置。
实际上,对于测试和prod,您可能有不同的根配置。但是你总是只使用一个作为起点。
但是,也可以使用以下任何来源:
该部分描述了可以使用哪种类型的源来创建应用程序上下文。这些源可以传递给构造函数:
public SpringApplication(Object... sources)
或者一个二传手:
public void setSources(Set<Object> sources)
我个人从未配置过提供构造函数或setter源代码的SpringApplication。我有一个根配置,并使用@Import注释我的SpringApplication类。
答案 1 :(得分:0)
使用@SpringApplication
或@EnableAutoConfiguration
春季启动时automatically configure your Spring application based on the jar dependencies that you have added
并且应该只在您的应用程序中使用一次,另一方面@Configuration
可以在@SpringApplication
和@EnableAutoConfiguration
的同一根中使用它。
Spring建议只添加@Configuration
@EnableAutoConfiguration
您可以在主要@Configuration
@EnableAutoConfiguration
从我的理解@EnableAutoConfiguration
和@SpringApplication
几乎有相同的工作