Java 如何在spring boot中扫描组件

Java 如何在spring boot中扫描组件,java,spring,spring-boot,Java,Spring,Spring Boot,spring boot如何处理组件扫描?我们没有在某些web.xml文件的springboot中指定标记。我们没有在spring boot中编写任何dispatcher servlet。那么SpringBoot在哪里进行组件扫描呢?它如何注册所有的控制器和服务呢?SpringBootWeb服务微服务的入口点是什么?注意:由于它是一个web项目,我可能不想在这里使用main方法。如果您查看注释,同一个包和子包有一个隐式方法: @Target(ElementType.TYPE) @Retention

spring boot如何处理组件扫描?我们没有在某些web.xml文件的springboot中指定
标记。我们没有在spring boot中编写任何dispatcher servlet。那么SpringBoot在哪里进行组件扫描呢?它如何注册所有的控制器和服务呢?SpringBootWeb服务微服务的入口点是什么?注意:由于它是一个web项目,我可能不想在这里使用main方法。

如果您查看注释,同一个包和子包有一个隐式方法:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Configuration
@EnableAutoConfiguration
@ComponentScan
public @interface SpringBootApplication {...
当然,它将在run方法之后执行:

public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }
问题是:我们没有指定组件扫描,这是不正确的。它在Spring引导注释中声明

编辑1:Spring MVC备选方案

然而,
是一个Spring注释,而不仅仅是Spring引导。您可以使用SpringMVC配置您的WARWeb应用程序,您根本不需要SpringBoot库。看看:

此外,为了更好地理解
@ComponentScan
,我想强调文档中的一些要点:

关于bean生命周期:

默认情况下,ApplicationContext实现急切地创建和 将所有单例bean配置为初始化过程的一部分

关于组件扫描:

默认情况下,用@Component、@Repository、@Service、, @控制器,或使用 @组件是唯一检测到的候选组件。然而,你 您可以通过应用自定义筛选器来修改和扩展此行为。 将它们添加为的includeFilters或excludeFilters参数 @组件扫描注释(或作为包含筛选器或排除筛选器) 组件扫描元素的子元素)


当您阅读Spring Boot的文档时,您对所有这些问题感到困惑的是哪一部分?如果您将它作为一个独立的
.jar
运行,那么您可以调用。如果您部署到JavaEE容器,那么Spring Boot有一个。您仍然需要调用
SpringApplication.run
-这将引导整个过程…我知道
@SpringBootApplication
包括
@ComponentScan
。但这是写在主方法顶部的。我想使用jar文件运行我的应用程序。基本上,我想摆脱触发我的应用程序的主要方法,仍然让我的组件扫描。现在我明白了。你不需要SpringBoot,你只需要SpringMVC。配置Web适配器,创建要部署在servlet容器上的war文件,并具有组件可以执行的行为。
@Configuration
@EnableWebMvc
public class ConfigWebMVC extends WebMvcConfigurerAdapter
{
...
}