且听书吟

  • 首页
  • 关于
  • 留言
  • 友链
  • 笔记
  • 代码
且听书吟

Spring Boot 简介

2017-05-13

现在,问题来了,刚才那个项目那么简单,那个,整个项目的启动过程中,到底发生了哪些魔法呢?

我们将 Groovy 的代码翻译为 Java版本,大概会看到,一个项目想要启用 Spring Boot,关键在于 SpringApplication 类和 EnableAutoConfiguration 注解的使用。

SpringApplication 是 Spring Boot 提供的用于 Java main 方法的启动类。它的执行操作首先为:

  1. Create an appropriate {@link ApplicationContext} instance (depending on your classpath)
  2. Register a {@link CommandLinePropertySource} to expose command line arguments as Spring properties
  3. Refresh the application context, loading all singleton beans Trigger any {@link CommandLineRunner} beans

然后 EnableAutoConfiguration 则为 Enable 类注解这里通过此注解,告诉 Spring Boot 开启自动装配的特性。

除了 EnableAutoConfiguration,我们常常和它并列使用的还有 ComponentScan Configuration 注解。这三个注解合起来,有一个等价的注解,叫做 SpringBootApplication,一般在我们的项目开发中,喜欢在项目最外面的包下面创建包含 main 方法的程序启动类,然后这个类上标记为 @SpringBootApplication 这个注解,这样就等价于基于 main 方法类所在的 package 为 Spring 扫包的基础包路径,且开启自动化配置。

自动化配置的实现,不得不说 Spring Boot 本质上是通过 Conditional 类注解来实现的。

@ConditionalOnClass 表示对应的类在classpath目录下存在时,才会去执行注解所标示的自动配置类或者自动配置方法,与之对应的我们就@ConditionalOnMissingClass 注解,也就是找不到对应的类的时候。

@ConditionalOnBean 和 @ConditionalOnMissingBean 则同样很容易按照字面意思理解。

当然 Conditional* 注解不仅仅上面提到的这些,还有 ConditionalOnExpression 一类的。

这个是我们从 Spring Boot 当中节选的一段代码,主要是为了演示自动化配置的具体实现。首先我们在项目配置里面标明 spring.jmx.enabled = true,ConditionalOnProperty 注解生效,然后 Spring 发现能找到 MBeanExporter.class 这个类,于是开始执行自动化配置的方法,因为这个时候项目中没有定义 MBeanExporter 这个 Bean,于是 ConditionalOnMissingBean 注解生效,Spring 开始读取配置属性,自动创建此 Bean 对象。

同理,任何一个自动装配的实现,基本上就是组合这些条件注解。

当然,如果能被 Spring Boot 官方直接支持的话是最吼的,目前被支持的肯定不止上面这些,我只是简单地列举了一些常见的项目。

Spring Boot 官方之前发起过好几次投票,就是列举一些框架,然后大家投票选择哪些想要被官方支持的。上半年的时候,我还在里面看到了之前姜老师维护的 camel,然而似乎并没有被选中。MyBatis 目前虽然有 Spring Boot 版,但是是由 MyBatis 团队自行维护,至少我6月份尝试使用的时候,问题还是蛮多的。 (2017年之后的版本基本可用,主要是有了 Boot 版本的 VFS)

上面是我从 Spring Boot 1.3.6 中找到的 spring.factories 文件的截图。当然,基本上只要上面有的,都能得到不错的支持。

1 2 3 4 5 6
3
评论 (1)
再想想
  • Ryan Wang

    讲得好!

    2019-12-21 回复
随机文章
  • 写给十年后的自己
  • 旧书之联想
  • 扒一扒当年与父母斗智斗勇的日子
  • 变与不变
  • 纵使生活平淡,爱情仍有万千期待
  • 忧伤的旋律
近期评论
  • 咚门发表在《中年的世界》
  • 云心怀鹤发表在《好羡慕,你还是学生》
  • I'M代代付发表在《写给十年后的自己》
  • 肉松发表在《写给十年后的自己》
  • 大雁养老发表在《写给十年后的自己》
  • rfed发表在《中年的世界》
文章标签
人生 同人 回忆 小说 影评 思考 悠久之翼 情感 成长 文字 时光 未来 杂思 梦想 爱情 童年 记忆 随想 青春 高考
订阅博客
Copyright © 2011-2023 且听书吟. Designed by nicetheme.
萌ICP备 20200318号