EnableAutoConfiguration spring注释如何工作?
我不喜欢粗略的抽象, 我认为Spring已经犯下了重大的重罪。
但是如果有人可以解释“自动”配置背后的算法,我愿意忽略它。
看看spring自己的javadocs ,除了说它会智能地猜测你需要什么以及对条件bean做些什么之外,它并没有给予太大的帮助。
有人知道用什么算法来确定需要加载的内容吗?
根据我作为Spring Boot用户的经验,Spring Boot决定启用哪些自动配置的基本因素是:
1)类路径上的类。 例如,如果存在RabbitMQ和Spring AMQP类,则将启用RabbitAutoConfiguration
。 相应的注释是@ConditionalOnClass
,
2)是否存在用户定义的bean。 例如,如果类路径上存在所有Spring Data JPA,则仅当用户尚未注册时,Spring Boot才会注册LocalContainerEntityManagerFactoryBean
bean。 用户注册的bean将“覆盖”默认bean。 相关注释是@ConditionalOnMissingBean
正如@DaveSyer所提到的,如果你想自己包含相关的配置,你当然可以在没有@EnableAutoConfiguration
情况下使用Spring Boot。 或者你可以使用@EnableAutoConfiguration
的exclude
字段的exclude
那么激烈的解决方案。 例如,如果您希望Spring Boot自动配置除ActiveMQ之外的所有内容,您将使用@EnableAutoConfiguration(exclude=ActiveMQAutoConfiguration.class)
在我看来,这里绝对没有重罪! 你可以使用你想要的Spring Boot。 如果您不想要它提供的东西,您可以轻松地部分或完全退出!
此外,如果您想了解封面,您可以添加该属性
logging.level.org.springframework.boot=DEBUG
application.properties
和Spring Boot很乐意详细报告自动配置的内容和不自动配置的内容
Spring Boot Reference Guide中有一些文档。 它并不是非常复杂,我几乎不认为只是包含一堆你可能已经写过的@Configuration
是重罪(因为它就是这样)。 如果您希望单独包含各个配置,请随意不要使用@EnableAutoConfiguration
。