Java 如何在spring boot中扫描组件
spring boot如何处理组件扫描?我们没有在某些web.xml文件的springboot中指定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中编写任何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
{
...
}