Spring Boot的新手。
在尝试从@ComponentScan
中排除bean时,令我惊讶的是发现从@EnableAutoConfiguration
中非常灵活的排除选项。
据我所知,@Configuration
是从@Component
继承的。
所以
@EnableAutoConfiguration
中删除配置,为什么不从@ComponentScan
中删除。ASSIGNABLE_TYPE/REGEX/etc
。在排除。那么为什么我们仍然需要excludeFilters
中的@ComponentScan
。彼此之间是否有限制,如果我们在这些排除项之间切换是不好的做法吗?
有人可以在这里澄清。
答案 0 :(得分:0)
@ComponentScan
和@EnableAutoConfiguration
用于初始化spring应用程序上下文的不同阶段。
@ComponentScan
-用于扫描bean候选对象,spring将搜索各种注释,例如@Component
,@Configuration
等,并获取bean候选对象。这是弹簧的功能。@EnableAutoConfiguration
-用于扫描自动配置候选者,spring将搜索标记为自动配置的配置并从中加载Bean候选者。这是弹簧靴的功能。可以使用@ComponentScan
注释自动配置候选者以加载bean候选者,但是通常是自动配置模块的模块会更精确,并使用@Import
或特殊注释。在spring-boot项目中,您应该有一个用@SpringBootApplication
注释的类,该类同时执行@ComponentScan
和@EnableAutoConfiguration
。这将触发两个功能并执行以下操作:
@SpringBootApplication
注释的bean候选对象如果您从@ComponentScan
中排除某些内容,则将其排除在特定的@ComponentScan
注释和过程的范围之外,无论是您的模块还是您创建的自动配置模块。
从@EnableAutoConfiguration
中排除某些内容时,您尝试排除自动配置候选对象。另外请注意,您不能使用此注释排除普通的@Configuration
,只能排除自动配置的候选对象。