SpringBoot自定义Start

自定义starter

starter:

​ 1、这个场景需要使用到的依赖是什么?

​ 2、如何编写自动配置

@Configuration  //指定这个类是一个配置类
@ConditionalOnXXX  //在指定条件成立的情况下自动配置类生效
@AutoConfigureAfter  //指定自动配置类的顺序
@Bean  //给容器中添加组件

@ConfigurationPropertie结合相关xxxProperties类来绑定相关的配置
@EnableConfigurationProperties //让xxxProperties生效加入到容器中

自动配置类要能加载
将需要启动就加载的自动配置类,配置在META-INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\

​ 3、模式:

      启动器只用来做依赖导入;

​ 专门来写一个自动配置模块;

​ 启动器依赖自动配置;别人只需要引入启动器(starter)

​ eg:mybatis-spring-boot-starter;

​ 自定义启动器名-spring-boot-starter

步骤:

1)启动器 yywzt-spring-boot-starter

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.yywzt.starter</groupId>
    <artifactId>yywzt-spring-boot-start</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>yywzt-spring-boot-start</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.yywzt.starter</groupId>
            <artifactId>yywzt-spring-boot-autoconfigure</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

    </dependencies>

</project>

2) 自动配置模块(-spring-boot-autoconfigure)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.yywzt.starter</groupId>
    <artifactId>yywzt-spring-boot-autoconfigure</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>yywzt-spring-boot-autoconfigure</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    </dependencies>

</project>

HelloProperties:

package com.yywzt.stater;

import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * @author yanzt
 * @date 2018/6/27 16:29
 * @description
 */
@ConfigurationProperties(prefix = "spring.yywzt")
public class HelloProperties {

    private String name;

    private String age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

HelloService

package com.yywzt.stater;

/**
 * @author yanzt
 * @date 2018/6/27 16:34
 * @description 
 */
public class HelloService {

    private HelloProperties helloProperties;

    public HelloProperties getHelloProperties() {
        return helloProperties;
    }

    public void setHelloProperties(HelloProperties helloProperties) {
        this.helloProperties = helloProperties;
    }

    public String yywztTest(String str){
        return helloProperties.getName() + "-" + str + "-" + helloProperties.getAge();
    }

}

HelloAutoConfiguration

package com.yywzt.stater;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author yanzt
 * @date 2018/6/27 16:30
 * @description
 */
@Configuration
@ConditionalOnClass(HelloProperties.class)
@ConditionalOnWebApplication
@EnableConfigurationProperties(HelloProperties.class)
public class HelloAutoConfiguration {

    @Autowired
    private HelloProperties helloProperties;

    @Bean
    public HelloService helloService(){
        HelloService helloService = new HelloService();
        helloService.setHelloProperties(helloProperties);
        return helloService;
    }
}

引用

导入starter

<dependency>
            <groupId>com.yywzt.starter</groupId>
            <artifactId>yywzt-spring-boot-start</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

application.yml中配置相关属性

spring:
  yywzt:
    name: one
    age: 12

test

package com.example.controller;

import com.yywzt.stater.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author yanzt
 * @date 2018/6/27 16:50
 * @description
 */
@RestController
@RequestMapping("/testMyStarter")
public class TestMyStarter {

    @Autowired
    private HelloService helloService;

    @RequestMapping("/Hello")
    public String Hello(){
        return helloService.yywztTest("OH!");
    }
}

   转载规则


《SpringBoot自定义Start》 yywzt 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录