Spring Boot (VI): Custom starter

In springboot, use the most is the starter. starter can be understood as a pluggable style plug-ins, for example, you want to use jdbc plug-in, you can use spring-boot-starter-jdbc. Over the Starter version of family members is also increasing. In traditional Maven project usually some layer components split into modules to manage, so interdependent multiplexing, in Spring Boot project we can create a custom Spring Boot Starter to achieve this purpose.

A, starter works

1, springboot jar package when you start scanning project depends, to find the package that contains jar file search spring.factories

2, the configuration according spring.factories class loading AutoConfiure

3, according to the conditions @Conditional annotations, automatic configuration and injection spring context Bean

Second, the custom starter

1, IDEA create an empty project

2, adding two Module1, a is automatically configured (Maven project), is a starter (springboot Engineering), initiator relies autoconfiguration.

3, project structure

4, internal code

(1)spring-boot-starter-autoconfigurer module

package com.springboot.starter;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
/**
 * @author:素小暖
 * @date:2020/2/9
 * @desc:
 */
@Configuration
@EnableConfigurationProperties(HelloProperties.class)
public class HelloAuto {
    @Autowired
    HelloProperties helloProperties;
 
    @Bean
    public HelloService helloService() {
        HelloService helloService = new HelloService();
        helloService.setHelloProperties(helloProperties);
        return helloService;
    }
}
package com.springboot.starter;
 
import org.springframework.boot.context.properties.ConfigurationProperties;
 
/**
 * @author:素小暖
 * @date:2020/2/9
 * @desc:
 */
@ConfigurationProperties(prefix = "springboot.hello")
public class HelloProperties {
    private String name;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
}
package com.springboot.starter;
 
/**
 * @author:素小暖
 * @date:2020/2/9
 * @desc:
 */
public class HelloService {
 
    HelloProperties helloProperties;
 
    public String hello() {
        return "hello" + helloProperties.getName();
    }
 
    public HelloProperties getHelloProperties() {
        return helloProperties;
    }
 
    public void setHelloProperties(HelloProperties helloProperties) {
        this.helloProperties = helloProperties;
    }
}

spring.factories file: 

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.springboot.starter.HelloAuto

POM file

<?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.springboot</groupId>
	<artifactId>spring-boot-starter-autoconfigurer</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>
 
	<name>spring-boot-starter-autoconfigurer</name>
	<description>Demo project for Spring Boot</description>
 
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.4.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>

(2) springbootstarter:

Starter is relatively simple, only the pom file, the introduction of automatic configuration can be.

<?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>wms</groupId>
    <artifactId>springboot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>com.springboot</groupId>
            <artifactId>spring-boot-starter-autoconfigurer</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
 
</project>

5, testing, new springboot project, pom file launcher introduced

<dependency>
    <groupId>springboot</groupId>
    <artifactId>springboot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

application.properties add configuration items

springboot.hello.name=chenzz

  Test controller:

package com.springboot.teststarter;
 
import com.wms.starter.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
 
/**
 * @author:素小暖
 * @date:2020/2/9
 * @desc:
 */
@RestController
public class controller {
 
    @Autowired
    HelloService helloService;
 
    @GetMapping("hello")
    public String hello(){
        return helloService.hello();
    }
}

5, browser access

Published 110 original articles · won praise 8 · views 6907

Guess you like

Origin blog.csdn.net/guorui_java/article/details/104241603