春季靴的新手。
尝试从@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/