4.自定义的Spring Boot Starters

在先前的章节中我们做了很多的配置,并且在Spring Boot应用中还有许多的自动配置。现在,我们需要看一下这些自动装配的源码和写一些我们自定义的starters.

  自定义的starters对于公司的项目来说是非常有用的。这样我们就可以自定义配置系统,包和配置项去解决数据库,连接池,http客户端等我们自己需要的。这章节,我们将会深入研究starters,这样的话,我们就可以知道写一个自定义的starter需要哪些规则以达到我们创建自己starter的目的。

4.1了解Spring Boot的自动装配

  Spring Boot有非常大的能力去引导应用和装配我们需要的事情,所有的这些没有耦合的代码在我们请求和应用中。这种神秘的功能来自于Spring本身而不是Java配置应用。当我们添加更多的starters,起来越多的类将会暴露在项目路径下。Spring Boot将会探测或发现特殊的类,然后自动创建的写入bean到应用上下文中。

  在前面的章节中,我们引用了大量的starters,例如spring-boot-starter-data-jpa,spring-boot-starter-data-test和spring-boot-starter-web等。一些代码的使用我们已经在前端的章节中讲过了,这里我们将会去Spring Boot是如何去实现这些应用。

4.1.1应用说明

  1. Spring Boot让我们有能力去获取AUTO CONFIGURATION REPORT,也就是说我们可以简单地以debug标志启动应用。作为环境变量,我们可以用DEBUG,作为系统参数,--Debug,或应用属性,--debug.
  2. 我们以DEBUG=true形式启动我们的应用。
  3. 接着你会看到控制台的信息,在结束的日志部分会看到AUTO-CONFIGURATION REPORT。信息如下:

=========================
AUTO-CONFIGURATION REPORT
=========================
Positive matches:
-----------------
…D
ataSourceAutoConfiguration
- @ConditionalOnClass classes found:
javax.sql.DataSource,org.springframework.jdbc.datasource.embedded.Embed
dedDatabaseType (OnClassCondition)
… N
egative matches:
-----------------
…G
sonAutoConfiguration
- required @ConditionalOnClass classes not found:
com.google.gson.Gson (OnClassCondition)

 

4.1.2如何工作

  我们看到了大量信息在控制台中,所以我们只选择其中一条信息来说明。

  通过每一行的日志信息,我们可看到Spring Boot告诉我们为什么确切的配置信息会被选择,什么样会是积极匹配和消极匹配,什么会消失加入防止特殊的配置被包含在混合中。让我们看一下积极的匹配——DataSurceAutoConfiguration:

  1. @ConditionalOnClass标志在我们的类当中。Spring Boot会探测到出现的特殊类,尤其是两份个类:org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType和javax.sql.DataSource
  2. OnClassCondition声明一系列的匹配被使用。这个是由@ConditionOnClass和@ConditionalOnMissingClass注释。

  OnClassCondition是大多数普通的探测类型,Spring Boot也使用其它情况。例如,OnBeanCondition是用于检查出现或缺席的特殊bean实例,OnPropertyCondition 是用于检查出现,缺席或特殊属性值,当然大量的自定义情况也可以使用@Conditional注释和Condition接口。

  消极的匹配是展示了一系列配置在Spring Boot中需要评估装载。这就意味着这里jar存在于项目路径下,但是并没有被Spring Boot载入或包含。GsonAutoConfiguration是引入spring-boot-autoconfigure的一部分,但是它并没的在Spring Boot中引入,因为它还要要引入com.google.gson.Gson类,而这个类并没有被探测到。

  我们看一下GsonAutoConfiguration文件:

  

@Configuration
@ConditionalOnClass(Gson.class)
public class GsonAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public Gson gson() {
return new Gson();
}
}

  通过这段代码,这里很容易让Spring Boot通过注释和打印相关信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值