程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

springboot自定义starter

发布于2021-05-29 23:01     阅读(466)     评论(0)     点赞(9)     收藏(1)


springboot中starter是一种非常重要的机制,原理是基于SpringBoot自动装配原理。能够免去复杂的配置,将其集成到starter,应用者只需要在maven引入starter依赖(pom.xml),springboot就可以自动扫描到要加载的信息并启动默认配置。springboot会自动通过classthpath路径下的类发现需要的bean并注册到IOC容器。并且springboot已经提供了日常企业开发中各种场景的spring-boot-starter依赖模块。

 

 

  • 实现自定义starter(其实就是一个web项目),然后再另一个项目中引入我们自定义的starter并使用。

这里需要说明的是,我们在本地自己测试调用starter的话,在一个工程下可以直接用pom.xml导入自己写的starter依赖。如果我们把starter 发布到远程服务端,就是别人通过 Maven 指定坐标就能从远程引用,不是导入jar包之类的。具体做法可以参考:https://www.cnblogs.com/kangxinxin/p/11881328.html

1、新建maven jar工程,zdy-spring-boot-starter,导入依赖

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>org.lagou</groupId>
  7. <artifactId>zdy-spring-boot-starter</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <dependencies>
  10. <dependency>
  11. <groupId>org.springframework.boot</groupId>
  12. <artifactId>spring-boot-autoconfigure</artifactId>
  13. <version>2.5.0</version>
  14. </dependency>
  15. </dependencies>
  16. </project>
  • 需要在自定义的starter中引入spring-boot-sutoconfigure依赖,用于自动装配

 

2、编写javaBean

  1. package com.lagou.pojo;
  2. //通用的bean对象
  3. /*
  4. @ConfigurationProperties:自动注入的注解,把properties配置文件转化为bean来使用的。
  5. @EnableConfigurationProperties:使@ConfigurationProperties注解生效
  6. 如果只配置@ConfigurationProperties注解,在IOC容器中是获取不到properties配置文件转化的bean的
  7. */
  8. @EnableConfigurationProperties(SimpleBean.class)
  9. @ConfigurationProperties(prefix = "simplebean")
  10. public class SimpleBean {
  11. private int id;
  12. private String name;
  13. public int getId() {
  14. return id;
  15. }
  16. public void setId(int id) {
  17. this.id = id;
  18. }
  19. public String getName() {
  20. return name;
  21. }
  22. public void setName(String name) {
  23. this.name = name;
  24. }
  25. }

3、自动配置类,主要作用就是执行@Bean标记的方法。

  1. package com.lagou.config;
  2. //自动配置类,把simpleBean生成实例对象存到容器中
  3. //@Configuration注解标识的类中声明了1个或者多个@Bean方法,Spring容器可以使用这些方法来注入Bean
  4. @Configuration
  5. public class MyAutoConfiguration {
  6. static {
  7. System.out.println("MyAutoConfiguration init...");
  8. }
  9. @Bean
  10. public SimpleBean simpleBean(){
  11. return new SimpleBean();
  12. }
  13. }
  • 那么springboot是如何加载MyAutoConfigureation的呢?通过把MyAutoConfigureation写进spring.factories文件中,从而springboot启动就能加载到simpleBean对象存到IOC容器中。

4、在resource下创建/META-INF/spring.factories,然后配置自己的自动配置类(key value形式,key是固定的EnableAutoConfiguration)。意思是SpringBoot启动的时候会去加载我们的SimpleBean到IOC容器,这其实是一种变形的SPI机制。

  1. org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  2. com.lagou.config.MyAutoConfiguration
  • 也就是说springboot启动过程中会加载各个jar包下的spring.factories,根据EnableAutoConfiguration的值找到配置类全路径,完成工具类中对象的自动装配

 

5、新建一个springboot模块,在测试类中测试调用simplebean

在application.properties中给simplebean对象赋值,用于测试

result:

6、这里虽然有了测试结果,但我们查看springboot自动配置类相关源码时会发现都会加上@ConditionalMissingBean的注解,而我们这个自动配置类实际上是没有加的。不加的话springboot启动以后就会默认加载自动配置类的bean,假如我们不需要呢?这时除非我们手动去pom.xml把starter注释掉(做法很low)。

 

原文链接:https://blog.csdn.net/ChaoticNg/article/details/117331378



所属网站分类: 技术文章 > 博客

作者:黑暗之神

链接:http://www.javaheidong.com/blog/article/207840/0120bb4a54340712a857/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

9 0
收藏该文
已收藏

评论内容:(最多支持255个字符)