一尘不染

EnableAutoConfiguration弹簧注释如何工作?

java

我不喜欢抽象,但 我认为Spring犯了重罪。

但是,如果有人可以解释“自动”配置背后的算法,那么我这次愿意忽略它。

看看spring自己的javadocs,除了说它将智能地猜测您需要的东西以及对条件bean要做的事情之外,它没有什么其他的。

有人知道用于确定需要加载哪些算法的算法吗?


阅读 211

收藏
2020-12-03

共1个答案

一尘不染

根据我作为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
。或者,您可以使用exclude领域不太激烈的解决方案@EnableAutoConfiguration。例如,如果您希望Spring
Boot自动配置除ActiveMQ之外的所有内容,则可以使用@EnableAutoConfiguration(exclude=ActiveMQAutoConfiguration.class)

我认为这里绝对没有重罪!您可以使用Spring Boot中想要的东西。如果您不想提供某些功能,则可以轻松选择部分或全部退出!

另外,如果您想在幕后看一下,则可以添加该属性

logging.level.org.springframework.boot=DEBUG

application.properties春季启动会很乐意给的是什么自动配置的详细报告,什么不是

2020-12-03