Spring boot如何处理组件扫描?我们在一些web.xml文件中没有在spring boot中指定<component-scan>
标记。我们不会在spring boot中编写任何调度程序servlet。那么Spring boot在哪里进行组件扫描?它如何注册所有控制器,服务? Spring Boot Web服务微服务的切入点是什么?注意:由于它是一个web项目,我可能不想在这里使用main方法。
答案 0 :(得分:2)
如果你看一下注释,那么相同的包和子包有一个隐含的:
@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 Boot注释中声明。
编辑1 : Spring MVC替代
但是,<component-scan>
是一个Spring注释,而不仅仅是Spring Boot。您可以使用Spring MVC配置WAR Web应用程序,根本不需要Spring Boot库。看看:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-config-customize
@Configuration
@EnableWebMvc
public class ConfigWebMVC extends WebMvcConfigurerAdapter
{
...
}
此外,为了更好地理解@ComponentScan
,我想强调一下文档中的一些要点:
关于bean生命周期:
默认情况下,ApplicationContext实现急切地创建和 将所有单例bean配置为初始化过程的一部分..
关于组件扫描:
默认情况下,使用@Component,@ Repository,@ Service注释的类, @Controller,或者自己注释的自定义注释 @Component是唯一检测到的候选组件。但是,你 只需应用自定义过滤器即可修改和扩展此行为。 将它们添加为includeFilters或excludeFilters参数 @ComponentScan注释(或包含过滤器或排除过滤器 组件扫描元素的子元素