英文:
SpringApplication.run: why do we need the "MyApplication.class" parameter when "@SpringBootApplication" annotation presents?
问题
为什么 SpringApplication.run 方法需要一个 MyApplication.class
参数?
Spring 文档中提到:
Parameters: primarySources - the primary sources to load
但当 @SpringBootApplication
存在时,我们已经告诉 Spring Bean 源位于当前包及其子包中,因为 @SpringBootApplication
包括 @ComponentScan
。我从 https://www.baeldung.com/spring-component-scanning 上获得了这个理解:
@ComponentScan without arguments tells Spring to scan the current package and all of its sub-packages.
因此,当存在 @SpringBootApplication
时,我们不应该需要 MyApplication.class
参数。
为什么需要这个参数?
我是否理解错了什么?
英文:
I always see Spring Boot main class as below:
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
Why does the SpringApplication.run method need a MyApplication.class
argument?
Spring doc says:
> Parameters: primarySources - the primary sources to load
But when @SpringBootApplication
presents, we already told Spring that the bean source is in the current package and its sub-packages because @SpringBootApplication
includes @ComponentScan
. I got his understanding from https://www.baeldung.com/spring-component-scanning:
> @ComponentScan without arguments tells Spring to scan the current
> package and all of its sub-packages.
So, when @SpringBootApplication
presents, we should not need the MyApplication.class
parameter.
Why is that parameter required?
Did I mis-understand anything?
答案1
得分: 2
如果您不告诉它要在哪里找到标有 @SpringBootApplication
注解的类,它需要扫描所有包以找到它,这会花费很多时间。
因此,明确告诉它 @SpringBootApplication
注解的类的位置可以让它更快地找到它。然后,它可以将其用作起始点,根据其元注解的配置,如 @ComponentScan
,来知道要扫描哪些包。
英文:
If you do not tell it where to find the class that is annotated with @SpringBootApplication
, it needs to scan all packages to find it out which take lot of times.
So explicit tell it the location of @SpringBootApplication
annotated class can make it find it much faster. It can then use it as the starting point to know which packages to scan next based on the configuration of its mete-annotation such as @ComponentScan
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论