springboot 启动后打印_小胖哥java干货分享:springboot应用的一些骚操作(2)

cfd1a61696514eee9794cd23bf48ebdb

大家好,我是码农小胖哥,刚刚忙完,但是今天的干货分享还是少不了的。没有关注的点下关注,给个赞鼓励一下。这也是我持续分享的动力。

在springboot中,有很多组件直接集成就起了作用,有的甚至没有一行配置,组件的特性就能直接拿来用。如果换SSM之类的框架,可能要写不少配置。今天就将一种骚操作。自动配置的机制之一 EnableAutoConfiguration。 上面的情形相信用过springboot的都遇到过。我开始也感到很神奇,于是就看了源码,找了很多地方都没找到这种配置的机制。偶尔一次我注意到很多starter 里有这种东西

a5c1495eea424a189a0103a0598829a1

有点配置文件的感觉,而且key 是一个注解 @EnableAutoConfiguration 的全路径。顺藤摸瓜找到一个叫 SpringFactoriesLoader 的工具类。

6d98ff6c97e54f60b68725e15d1d468c

如图所示,清楚写着资源路径 "META-INF/spring.factories" , 说明上面的那个配置文件就是 为这个类准备的。该类有两个方法

9fc20a906af94354b3666a6163a87e55

这个类从注释上知道是通过 配置文件 key 所声明的类来获取 所有对应值的类的实例列表。

0bbe61b452a3402a992e3bf0a16ee1a7

第二个 是加载给定类型的实现类的完全限定名的集合。

到这里我们就可以猜想一下,在这里声明了之后,就可以写实例化的逻辑,然后注入了配置,实现了自动化配置,而且可插拔。然后根据这个猜想 我们从来搞一下。

在springboot资源包下新建了 META-INF/spring.factories ,内容照葫芦画瓢 为

afbe6eee82414b6d821166220136ee73

第一个测试自动配置 第二个 测试SpringFactoriesLoader 两个方法的作用。既然自动化配置。当然应该可以从外部加载。所以我声明了一个在springboot main类路径之外的一个测试自动化配置类。我们都知道 springboot 启动的时候会自动扫描 main类路径以内的所有包的 spring bean。

5334717c4a704838815f68461e267219

这个javaConfig 我什么注解也没有在类上添加,以往的普通操作都是要加一些@Configuration 之类的注解。现在我只加了 日志的 lombok类,来打印日志。

如果这个javaConfig 生效 应该形成两个 spring bean。启动项目后 借助

spring-boot-starter-actutor 这个工具和IDEA我们可以看到

8aee8a96db2145c587ad34deee374645

这是个开发小技巧,借助于上面的工具我们可以在IDEA可视化工具看到所有的spring bean,根据上图说明配置自动生效了。同时发现 Selector 也通过配置实例化了。我们在看看打印结果

50c736173d604f43a61824471e735b26

第一行打印出来的 是 SpringFactoriesLoaderloadFactories 方法 实例化了 接口对应的实现类,第二行是第二个方法loadFactoryNames 获取到了实现类的全限定名。这样的作用就很清楚了,以后有机会你就可以用SpringFactoriesLoader搞事情了。 这种机制有点像java 的SPI接口机制 同样是声明了一个文件来获取实现类。有时间可以自己学习下java 的SPI。dubbo,slf4j, 数据库驱动,apache camel 都用了大量的 java SPI。 上面的写法你可以独立写一个项目,作为依赖引入springboot 看看生效不生效。自己动手搞一下,多动手才能有进步。

通过上面的介绍和演示,你脑海中是不是有了新的骚操作呢?有请留言告诉我。我是 码农小胖哥 关注我 有更多干货奉上。别忘记点个赞哦。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值