我不喜欢抽象,但 我认为Spring犯了重罪。
但是,如果有人可以解释“自动”配置背后的算法,那么我这次愿意忽略它。
看看spring自己的javadocs,除了说它将智能地猜测您需要的东西以及对条件bean要做的事情之外,它并没有什么其他的。
有人知道用于确定需要加载哪些算法的算法吗?
根据我作为Spring Boot用户的经验,Spring Boot决定要启用哪些自动配置的基本因素是:
1)类路径上存在的类。例如,如果存在RabbitMQ和Spring AMQP类,则将RabbitAutoConfiguration启用。相应的注释是@ConditionalOnClass,
RabbitAutoConfiguration
@ConditionalOnClass
2)是否存在用户定义的bean。例如,如果所有Spring Data JPA都存在于类路径中,则Spring Boot将LocalContainerEntityManagerFactoryBean仅在用户尚未注册Bean的情况下对其进行注册。用户注册的bean将“覆盖”默认的bean。相关的注释是@ConditionalOnMissingBean
LocalContainerEntityManagerFactoryBean
@ConditionalOnMissingBean
正如@DaveSyer提到的,@EnableAutoConfiguration如果您不希望自己包含相关配置,那么当然可以使用Spring Boot 。或者,您可以使用exclude领域不太激烈的解决方案@EnableAutoConfiguration。例如,如果您希望Spring Boot自动配置除ActiveMQ之外的所有内容,则可以使用@EnableAutoConfiguration(exclude=ActiveMQAutoConfiguration.class)
@EnableAutoConfiguration
exclude
@EnableAutoConfiguration(exclude=ActiveMQAutoConfiguration.class)
我认为这里绝对没有重罪!您可以使用Spring Boot中想要的东西。如果您不想提供某些东西,可以轻松选择部分或全部退出!
此外,如果您想在幕后看一下,则可以添加该属性
logging.level.org.springframework.boot=DEBUG
到application.propertiesspring启动会很乐意给的是什么自动配置的详细报告,什么不是
application.properties