I am no fan of gross over abstractions, And i think Spring has committed a major felony.
但如果有人可以解释“自动”配置背后的算法,我这次愿意忽略它。
看看spring自己的javadocs http://docs.spring.io/spring-boot/docs/0.5.0.M3/api/org/springframework/boot/autoconfigure/EnableAutoConfiguration.html,除了说它会智能地猜测您需要什么以及对条件 bean 做什么之外,它并没有透露太多信息。
有人知道使用什么算法来确定需要加载的内容吗?
根据我作为 Spring Boot 用户的经验,Spring Boot 决定启用哪些自动配置的基本因素是:
1) 类路径中存在的类。例如,如果存在 RabbitMQ 和 Spring AMQP 类,则RabbitAutoConfiguration
将被启用。对应的注释是@ConditionalOnClass
,
2) 是否存在用户定义的bean。例如,如果所有 Spring Data JPA 都存在于类路径中,Spring Boot 将注册一个LocalContainerEntityManagerFactoryBean
仅当用户尚未这样做时才使用 bean。用户注册的 bean 将“覆盖”默认的 bean。相关注释是@ConditionalOnMissingBean
正如 @DaveSyer 提到的,你当然可以使用 Spring Boot,无需@EnableAutoConfiguration
如果你想自己包含相关配置。或者你可以使用不太激烈的解决方案exclude
现场@EnableAutoConfiguration
。例如,如果您希望 Spring Boot 自动配置除 ActiveMQ 之外的所有内容,您可以使用@EnableAutoConfiguration(exclude=ActiveMQAutoConfiguration.class)
在我看来,这里绝对不存在重罪!您可以从 Spring Boot 中使用您想要的内容。当您不想要它提供的某些东西时,您可以轻松选择部分或完全退出!
另外,如果您想了解幕后情况,您可以添加属性
logging.level.org.springframework.boot=DEBUG
to application.properties
Spring Boot 很乐意提供一份详细报告,说明哪些内容已自动配置,哪些内容未自动配置
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)