手写自定义SpringBoot-Starter,感受框架的魅力和原理

网站建设4年前发布
35 0 0

20230307014746949ecae19ea0f4b56b7572a2ddbb0e055925a4333,Springboot的自动配置原理,面试中经常问到,一直看也记不住,不如手写一个starter,加深一下记忆。看了之后发现大部分的starter都是这个原理,实践才会记忆深刻。核心思想:约定大于配置。,我们直接看看官网的starter是怎么设计的,仿照这写一个就行了!,我们Ctrl点击<artifactId>spring-boot-starter-web</artifactId>,进入内部pom,我们发现里面有个。,在此Ctrl点击<artifactId>spring-boot-starter</artifactId>进入starter内部pom:我们发现之后干活的就是这个包依赖:,20230307014258b9c5c62462dedc3eb2f508daa8a529951638df396,我们现在创建两个项目即可:,小编看到官方这么写的提醒,大家可以按照官网的进行起名称,不要学小编哈!!,202303070147464532f9c6206b94182db038b7e609e7953d8c4b347,输入总的项目名称:,20230307014258f34f324592ef8f6e94b179b212bcafde8c7360838,在空白项目里新建两个,这里可以分开单独建立,这里小编跟着雷神一样了,就不单独建立项目了!,2023030701474751a2d9a38ac67f01b8109935d30dc799e8aaac390,20230307014300312e2bf73b155383f0b4387b7ec52819aa3071464,包名和名称:,2023030701430116e13de462bf702f8fb7928bd8f9071975635f496,2023030701430201798c0294a456b7ebf30612a7f3c7b653c698706,这里把没有用的都删除了!!可以不删。,2023030701430266b0372800f596b831f6760c836e360e0b4dbd903,就是上面建立项目的设置的。,2023030701474997a00e366e6e3340fac362769c79aff73e3867123,还是把没用的东西删除了,剩余如下图:,20230307014304d68a904834d2bc53f6a392b0f4af5a44a7d265739,首先删除了自动启动类,咱们用不到,在spring-boot-autoconfigure项目中新建一个bean,此时不需要让这个bean在容器中,我们写一个自己配置,让他自动加入到容器中。
这就是自动配置的思想。,这里为了获取配置文件中的属性值,springboot自动配置源码里大部分都是,这样实现在一个配置文件中书写,其他的可以按照开头获取到属性和值!,主要就是condition下的几个注解,来完成bean是否加入到容器中:
常用的:,2023030701480296321f4185c8723ce22754e8635b843fc33747501,我们看到源码里自动配置,就是从这个文件获取加载,所以我们模仿这新建一个,这样就可以扫描加入容器中!,2023030701430475d9e70958775b4d5cb927bd49589a07392f8e923,如果是springboot2.7以上就是:文件夹名称:META-INF.spring文件名称:org.springframework.boot.autoconfigure.AutoConfiguration.imports。,20230307014752b458107995b5cbbb6be331933011042eca9435773,里面直接写全类名即可!,先把spring-boot-autoconfigure​打包到本地库,在打包spring-boot-starter,顺序一定要有,不然找不到前者的包!,2023030701430591c0a79160745629592174b0ec0c871a92ac9d290,我们那一个新项目进行测试,新项目小编就不带大家建了!,20230307014306652b61031d79e0820030595f80e15faf3d776a598,成功访问,不过中文是有乱码的,小编找不到解决方法,有懂的还请留言告知!!
主流程通了就行,慢慢理解了自动配置的魅力!
总流程应该就是这样的:,引入starter --- xxxAutoConfiguration --- 容器中放入组件 ---- 绑定xxxProperties ---- 配置项。,2023030701430683834ad64a24e5f02c338539c22b8913ba24aa286,中文是乱码,可能是servlet没有吧,有懂的可以留言告诉小编方案,谢谢大家!,20230307014753d6bc94750f79bfdadf7245343c8db802881528541,一看会就,一动手就废!大家还是要做自己实操,不要眼高手低,这样才会有收获,根本就是约定大于配置+SPI发现机制!还有就是一些经常出现在源码里的注解,大家记住就可以自己写starter了!

© 版权声明

相关文章