SpringBoot核心【自定义starter】

简介: 为了加深对SpringBoot中自动装配的理解,我们自定义一个starter来实现,具体步骤如下


 为了加深对SpringBoot中自动装配的理解,我们自定义一个starter来实现,具体步骤如下

自定义starter

IDEA中创建maven项目

image.png

指定项目的坐标信息

image.png

image.png

项目创建完成~

配置依赖

 在pom配置文件中添加如下依赖,增加SpringBoot自身的自动配置作为依赖。

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
        <version>2.1.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-configuration-processor</artifactId>
         <version>2.1.4.RELEASE</version>
     </dependency>
</dependencies>

属性配置类

/**
 * @program: spring-boot-starter-hello
 * @description: 属性配置类
 * @author: 波波烤鸭
 * @create: 2019-05-09 20:52
 */
@ConfigurationProperties(prefix = "hello")
public class HelloServiceProperties {
    private static final String MSG = "world";
    private String msg = MSG;
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
}

判断依据类

/**
 * @program: spring-boot-starter-hello
 * @description: 判断依据类
 * @author: 波波烤鸭
 * @create: 2019-05-09 20:58
 */
public class HelloService {
    private String msg;
    public String sayHello(){
        return "Hello "+msg;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
}

 根据此类的存在与否来创建这个类的bean

自动配置类

/**
 * @program: spring-boot-starter-hello
 * @description: 自动配置类
 * @author: 波波烤鸭
 * @create: 2019-05-09 21:00
 */
@Configuration
@EnableConfigurationProperties(HelloServiceProperties.class)
@ConditionalOnClass(HelloService.class)
@ConditionalOnProperty(prefix = "hello",value ="enabled",matchIfMissing = true)
public class HelloServiceAutoConfiguration {
    @Autowired
    private HelloServiceProperties helloServiceProperties;
    @Bean
    @ConditionalOnMissingBean(HelloService.class)
    public HelloService helloService(){
        HelloService helloService = new HelloService();
        helloService.setMsg(helloServiceProperties.getMsg());
        return helloService;
    }
}

 根据HelloServiceProperties提供的参数,并通过@ConditionalOnClass判断HelloService这个类在类路径中是否存在,且当容器中没有这个Bean的情况下自动配置这个bean。

注册配置

 若想自动配置生效,我们需要注册自动配置类,在src/main/resources下新建META-INF/spring.factories,如下:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.dpb.spring_boot_starter_hello.HelloServiceAutoConfiguration

如果有多个自动配置,则用“,”隔开。

结构如下:

image.png

使用自定义的starter

1.创建好SpringBoot项目

 创建好一个SpringBoot项目。

2.引入我们自定义的starter

<dependency>
    <groupId>com.dpb</groupId>
    <artifactId>spring-boot-starter-hello</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

3.查看引入的具体依赖

image.png

4.工具类中使用

/**
 * @program: springboot-hello
 * @description: 自定义starter测试
 * @author: 波波烤鸭
 * @create: 2019-05-09 21:32
 */
@RestController
public class HelloStarterController {
    @Resource
    HelloService helloService;
    @RequestMapping("/")
    public String index(){
        return helloService.sayHello();
    }
}

5.启动测试

开启查看自动配置的选项和未开启自动配置的信息,在application.properties中加入如下配置即可

debug=true

在启动选项中我们发现了我们自定义的starter被自动配置了

image.png

访问:http://localhost:8082/

image.png

然后我们在application.properties中配置如下内容

hello.msg=波波烤鸭

再次启动访问结果如下:

image.png

ok~自定义的starter搞定


相关文章
32SpringBoot自定义Starter
32SpringBoot自定义Starter
64 0
32SpringBoot自定义Starter
|
8月前
|
设计模式 Java 机器人
SpringBoot3自动配置流程 SPI机制 核心注解 自定义starter
SpringBoot3自动配置流程 SPI机制 核心注解 自定义starter
|
架构师 NoSQL Java
【案例实战】SpringBoot3.x自定义封装starter实战
【案例实战】SpringBoot3.x自定义封装starter实战
【案例实战】SpringBoot3.x自定义封装starter实战
|
11天前
|
Java 数据库连接 Maven
最新版 | SpringBoot3如何自定义starter(面试常考)
在Spring Boot中,starter是一种特殊的依赖,帮助开发人员快速引入和配置特定功能模块。自定义starter可以封装一组特定功能的依赖和配置,简化项目中的功能引入。其主要优点包括模块化、简化配置、提高代码复用性和实现特定功能。常见的应用场景有短信发送模块、AOP日志切面、分布式ID生成等。通过创建autoconfigure和starter两个Maven工程,并编写自动配置类及必要的配置文件,可以实现一个自定义starter。最后在测试项目中验证其有效性。这种方式使开发者能够更便捷地管理和维护代码,提升开发效率。
最新版 | SpringBoot3如何自定义starter(面试常考)
|
7月前
|
IDE Java Maven
SpringBoot自定义starter及自动配置
SpringBoot自定义starter及自动配置
|
6月前
|
Java Maven 开发者
Spring Boot中的自定义Starter开发
Spring Boot中的自定义Starter开发
|
6月前
|
Java Maven Spring
Spring Boot中的自定义Starter开发
Spring Boot中的自定义Starter开发
|
8月前
|
Java 数据库连接 Maven
SpringBoot【付诸实践 01】SpringBoot自定义starter保姆级教程(说明+源码+配置+测试)
SpringBoot【付诸实践 01】SpringBoot自定义starter保姆级教程(说明+源码+配置+测试)
77 1
|
8月前
|
Java Spring 容器
SpringBoot2 | SpringBoot自定义AutoConfiguration | SpringBoot自定义starter(五)
SpringBoot2 | SpringBoot自定义AutoConfiguration | SpringBoot自定义starter(五)
53 0
|
8月前
|
Java Maven Spring
Spring Boot - 手把手教小师妹自定义Spring Boot Starter
Spring Boot - 手把手教小师妹自定义Spring Boot Starter
115 0