其他分享
首页 > 其他分享> > 雷丰阳springboot自定义starters

雷丰阳springboot自定义starters

作者:互联网

目录

雷丰阳课件

image-20210502205555891

image-20210502205618255

image-20210502205640463

image-20210502205701949

视频跟学

springboot的强大在于,有很多的场景启动器,也就是starters。

image-20210502204330332

但是无论如何springboot都没有办法,囊括开发当中的所有的场景。

所以说呢,我们往往需要自定义这些starters,简化springboot的使用。

我们写好了这些starters的时候,别的开发人员,可以使用这些starters。

就不需要做过多的配置了。

如何自定义starters


第一:依赖

starter,场景启动器,我们要确定,这个场景需要使用到的依赖是什么东西?、

也就是说,我们要导入哪些jar包。


第二:自动配置

如何编写自动配置。

我们之前已经看过非常多的自动配置的源码了,我们可以提取一些经验。

1. 
@Configuration // 指定一个类,是一个自动配置类

2.
@ConditionalOnXXX //在指定条件成立的情况下,自动配置类生效。
@ConditionalOnWebApplication
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class,WebMvcConfigurerAdapter.class })
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)

3. 
@AutoConfigureOrder //可以指定自动配置类的顺序
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)

4. 
@Bean //给容器中添加组件

5. 
@ConfigurationProperties结合相关的xxxProperties类来绑定,我们相关的配置
@EnableConfigurationProperties 让我们的xxxProperties类生效,并且加入到容器中,别人就能够自动装配了。

6.
自动配置类要能够加载,有一个要求,必须把自动配置类放在类路径下的META-INF/spring.factories
将需要启动就加载的自动配置类,配置在META-INF/spring.factories

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\

第三:模式

启动器模块只是一个空的jar文件,用来做辅助性的依赖管理的。

image-20210502205945867

这个jar包只是用来做辅助性的依赖管理的。

我们的模式应该是,我们先来编写一个xxx-starter的启动器。

我们的自动配置应该再来写一个模块,叫做xxx-starter-autoconfigurer。

我们的启动器,依赖我们的自动配置。

别人要使用的时候,就引入我们的启动器,自动引入我们的自动配置就看可以了。

这就是一个模式,我们希望大家这么来设计。

启动器:只用来做相关的依赖导入。

专门来写一个自动配置模块,启动器依赖自动配置模块。

springboot官方的命名都是前缀都是spring-boot-starter

模式一般都是:spring-boot-starter-模块名

如果是我们自定义的starter,我们推荐使用后缀:spring-boot-starter

模式一般都是采用:模块名-sping-boot-starter

举例:mybatis-spring-boot-starter

创建项目

image-20210502212746980

image-20210502212854923

image-20210502212942529

image-20210502213038274

image-20210502213113524

image-20210502213321666

image-20210502221128573

修改autoconfigurer的pom文件

<?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.atguigu.starter</groupId>
	<artifactId>atguigu-spring-boot-starter-autoconfigurer</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>atguigu-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>1.5.10.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>

		<!--引入spring-boot-starter;所有starter的基本配置-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

	</dependencies>
</project>

修改starter的pom文件

<?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.atguigu.starter</groupId>
    <artifactId>atguigu-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--启动器-->
    <dependencies>
        <!--引入自动配置模块-->
        <dependency>
            <groupId>com.atguigu.starter</groupId>
            <artifactId>atguigu-spring-boot-starter-autoconfigurer</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

只是在starter当中引入autoconfigurer的模块

编写helloService

package com.atguigu.starter;

public class HelloService {

    HelloProperties helloProperties;

    public HelloProperties getHelloProperties() {
        return helloProperties;
    }

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

    public String sayHelloAtguigu(String name) {
        return helloProperties.getPrefix() + "-" + name + helloProperties.getSuffix();
    }
}

编写HelloProperties

package com.atguigu.starter;


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

@ConfigurationProperties(prefix = "atguigu.hello")
public class HelloProperties {

    private String prefix;
    private String suffix;

    public String getPrefix() {
        return prefix;
    }

    public void setPrefix(String prefix) {
        this.prefix = prefix;
    }

    public String getSuffix() {
        return suffix;
    }

    public void setSuffix(String suffix) {
        this.suffix = suffix;
    }
}

使用@ConfigurationProperties(prefix = "atguigu.hello")把这个类,变成了一个是和配置文件绑定的类。

编写自动配置类

编写自动配置类的目的,是为了把我们写的服务service自动注入到我们的IOC容器当中的。

package com.atguigu.starter;

import org.springframework.beans.factory.annotation.Autowired;
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;

@Configuration
@ConditionalOnWebApplication //web应用才生效的哦
@EnableConfigurationProperties(HelloProperties.class)
public class HelloServiceAutoConfiguration {

    @Autowired
    HelloProperties helloProperties;

    /*给IOC容器当中,添加了一个HelloService组件*/
    @Bean
    public HelloService helloService(){
        HelloService service = new HelloService();
        service.setHelloProperties(helloProperties);
        return service;
    }
}

自动配置类生效的配置

image-20210502221727166

maven install

image-20210502221823696

写一个测试项目

第一步,pom文件当中引入自定义的starter

image-20210502221928921

第二步,编写了一个测试的controller

image-20210502222012321

第三步,编写了相应的配置文件

image-20210502222039511

测试结果

运行程序,然后使用hello请求一下:

image-20210502221107413

测试成功。自定义starter生效了哦。

标签:springboot,自定义,配置,boot,springframework,starters,自动,atguigu,starter
来源: https://www.cnblogs.com/gnuzsx/p/14726660.html