手写自定义springboot-starter,感受框架的魅力和原理( 二 )

2. 编写一个配置文件这里为了获取配置文件中的属性值,springboot自动配置源码里大部分都是,这样实现在一个配置文件中书写,其他的可以按照开头获取到属性和值?。?
/** * @author wangzhenjun * @date 2022/10/14 16:28 */@Data@ConfigurationProperties("wang.name")public class MyProperties {private String prefix;private String suffix;}3. 编写自动配置import com.wang.springbootautoconfigure.properties.MyProperties;import com.wang.springbootautoconfigure.service.HelloService;import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;import org.springframework.boot.context.properties.EnableConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/** * @author wangzhenjun * @date 2022/10/14 16:33 */@Configuration//没有这个bean的时候才会生效@ConditionalOnMissingBean(HelloService.class)// 加载配置文件,让它成为容器中的bean@EnableConfigurationProperties(MyProperties.class)public class ServiceAutoConfiguration { /*** 把刚刚写的服务,加入到容器中*/@Beanpublic HelloService helloService (){return new HelloService();}}主要就是condition下的几个注解,来完成bean是否加入到容器中:常用的:

  • @ConditionalOnClass
  • @ConditionalOnMissingClass
  • @ConditionalOnBean
  • @ConditionalOnMissingBean
  • @ConditionalOnProperty
    手写自定义springboot-starter,感受框架的魅力和原理

    文章插图
4. 新建spring.factories我们看到源码里自动配置,就是从这个文件获取加载,所以我们模仿这新建一个,这样就可以扫描加入容器中?。?
手写自定义springboot-starter,感受框架的魅力和原理

文章插图
如果是springboot2.7以上就是:文件夹名称:META-INF.spring文件名称:org.springframework.boot.autoconfigure.AutoConfiguration.imports
手写自定义springboot-starter,感受框架的魅力和原理

文章插图
里面直接写全类名即可!
5. 打包先把spring-boot-autoconfigure打包到本地库,在打包spring-boot-starter,顺序一定要有,不然找不到前者的包?。?
手写自定义springboot-starter,感受框架的魅力和原理

文章插图
六、测试我们那一个新项目进行测试 , 新项目小编就不带大家建了!
1. 导入咱们的starter依赖<dependency><groupId>com.wang</groupId><artifactId>spring-boot-starter</artifactId><version>1.0-SNAPSHOT</version></dependency>2. 添加配置文件wang: name:prefix: hellosuffix: 886
手写自定义springboot-starter,感受框架的魅力和原理

文章插图
3. 新建controller测试类@RestController@RequestMapping("/test")public class TestController {@Autowiredprivate HelloService helloService;@GetMapping("/starter")public String starter(){return helloService.HelloWord("tom");}}4. 测试访问成功访问 , 不过中文是有乱码的,小编找不到解决方法,有懂的还请留言告知?。?主流程通了就行,慢慢理解了自动配置的魅力!总流程应该就是这样的:
引入starter --- xxxAutoConfiguration --- 容器中放入组件 ---- 绑定xxxProperties ---- 配置项
手写自定义springboot-starter,感受框架的魅力和原理

文章插图
中文是乱码,可能是servlet没有吧 , 有懂的可以留言告诉小编方案,谢谢大家?。?
手写自定义springboot-starter,感受框架的魅力和原理

文章插图
七、总结一看会就,一动手就废!大家还是要做自己实操,不要眼高手低,这样才会有收获,根本就是约定大于配置+SPI发现机制!还有就是一些经常出现在源码里的注解,大家记住就可以自己写starter了!
可以看下一小编的微信公众号 , 和网站文章首发看,欢迎关注?。?
手写自定义springboot-starter,感受框架的魅力和原理

文章插图
点击访问!小编自己的网站,里面也是有很多好的文章哦!
【手写自定义springboot-starter,感受框架的魅力和原理】

推荐阅读