春季靴的新手。

尝试从@ComponentScan中排除bean时,令我惊讶的是,从@EnableAutoConfiguration中发现了非常灵活的exclude选项。

据我了解,@Configuration是从@Component继承的。

所以,


为什么我必须从@EnableAutoConfiguration中删除​​配置,为什么不从@ComponentScan中删除​​配置。
我们有ASSIGNABLE_TYPE/REGEX/etc。在排除。那么为什么我们仍然需要excludeFilters中的@ComponentScan


彼此之间有任何限制吗?如果我们在这些排除之间进行切换,那是不好的方法吗?

有人可以在这里澄清。

最佳答案

@ComponentScan@EnableAutoConfiguration在初始化spring应用程序上下文的不同阶段中使用。


@ComponentScan-用于扫描bean候选对象,spring将搜索各种注释,例如@Component@Configuration等,并获取bean候选对象。这是弹簧的功能。
@EnableAutoConfiguration-用于扫描自动配置候选者,spring将搜索标记为自动配置的配置并从中加载Bean候选者。这是弹簧靴的功能。


可以用@ComponentScan注释自动配置候选者以加载bean候选者,但是通常是自动配置模块的模块会更精确,并使用@Import或特殊注释。在spring-boot项目中,应该有一个用@SpringBootApplication注释的类,该类同时执行@ComponentScan@EnableAutoConfiguration。这将同时触发两个功能并执行以下操作:


从模块中加载所有带有@SpringBootApplication注释的bean候选对象
搜索类路径中加载的自动配置模块
尝试加载自动配置模块
尝试从自动配置模块中加载bean候选者


当您从@ComponentScan中排除某些内容时,该内容将从特定的@ComponentScan注释和过程的范围中排除,无论是您的模块还是您创建的自动配置模块。

当您从@EnableAutoConfiguration中排除某些内容时,您尝试排除自动配置候选对象。另请注意,您不能使用此注释排除普通的@Configuration,而只能排除自动配置的候选项。

关于java - @ComponentScan中的excludeFilters与@EnableAutoConfiguration中的exclude,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56081647/

10-12 02:32