前言

已经是2019年了,这玩意已经不“新鲜”了,想起17年公司的大佬培训SpringBoot的一番话:

这个东西其实并不神奇,它有个自动装配的功能,然后打开jar包,找到源码,打开spring.factories说了一大堆…


但对于当时刚刚实习的萌新一脸懵逼,对于SpringBoot只是觉得好方便啊,加上JPA开发起来快多了。

时隔两年后,再看SpringBoot源码,确实如此,只能怪当时功力不够。这就是为什么大佬学个东西,半天就会了,很多技术的思想都是相通的,当然基础也非常的重要。

不知道以后还能不能超越大佬的高度,因为他真的是巨佬啊!

大佬还喜欢说一句话:

魔鬼藏在细节中


自定义一个Starter

其实不难,需要掌握两点:

  • 约定大于配置
  • 条件注解

约定大于配置

这个是现在软件开发中一个很重要思想(规范?),其实也很好理解,不解释。

条件注解

条件注解其实在Spring中就已经有了,但是哪个版本出现的还没查阅,SpringBoot只不过发扬了、光大了而已。

例如@ConditionalOnClass这个注解,可以理解为当类路径上有某个指定的类就生效,自动配置就是利用这些@Conditional*为前缀的注解来完成的,也就是七八个而已,而且知名见意很好理解。

Demo说明

所谓的自动装配就是提前帮我们配置好一个Bean,然后要用的时候,直接添加注解使用就行,就拿Redis来说,redisTemplate就是帮我们自动装配好了的,然后要用的时候直接加个注解就行。

image.png

我们的这个demo定义一个具有包装功能的starter,重点在于看看它是如何实现自动装配的,具体可以参考下SpringBoot的自动装配jar包org/springframework/boot/spring-boot-autoconfigure/2.1.8.RELEASE/spring-boot-autoconfigure-2.1.8.RELEASE.jar它的一些格式进行参考。
image.png

具体的看代码,运行一下就能体会到自动装配的奥妙所在了。如果还没实现过的,一定一定实现下,动手才是硬道理!

参考资料

请你相信我所说的都是错的