java入门 自定义springboot starter

一、 参考资料

参考黑马视频

二、实现starter

pom.xml

xml 复制代码
		<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.sht</groupId>
	<artifactId>hello-spring-boot-starter</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>hello-spring-boot-starter</name>
	<url>http://maven.apache.org</url>

	<properties>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.6.RELEASE</version>
	</parent>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>

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

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-autoconfigure</artifactId>
		</dependency>
		
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.12</version>
		</dependency>
		
	</dependencies>
</project>

HelloProperties.java

配置类,配置用于封装application中的yml

java 复制代码
package com.sht.hello.config;

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

import lombok.Data;

/**
 * Hello模块的配置属性类,封装配置文件中的参数信息
 * @author leon
 *
 */
@Data
@ConfigurationProperties(prefix = "hello")
public class HelloProperties {
	
	private String name;
	private String address;
	
	@Override
	public String toString() {
		return "HelloProperties [name=" + name + ", address=" + address + "]";
	}
}

HelloService.java服务类

服务类需要使用到application.yml中的配置项

java 复制代码
package com.sht.hello.service;

import com.sht.hello.config.HelloProperties;

/**
 * Hello模块中的服务
 * @author leon
 *
 */
public class HelloService {

	private HelloProperties helloProperties;
	
	public HelloService(HelloProperties helloProperties) {
		this.helloProperties = helloProperties;
	}
	
	public String sayHello()
	{
		return helloProperties.getName() + "-" + helloProperties.getAddress();
	}
}

HelloAutoConfiguration.java自动配置类

java 复制代码
package com.sht.hello.config;

import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.sht.hello.service.HelloService;

/**
 * Hello模块的自动配置类
 * @author leon
 *
 */
@Configuration
@EnableConfigurationProperties(HelloProperties.class)
public class HelloAutoConfiguration {

	private HelloProperties helloProperties;
	
	//构造中注入配置参数对象
	public HelloAutoConfiguration(HelloProperties helloProperties)
	{
		this.helloProperties = helloProperties;
	}
	
	@Bean
	@ConditionalOnMissingBean
	public HelloService helloService() {
		return new HelloService(helloProperties);
	}
}

spring.factories文件

路径为maven项目中的resource/META-INF/spring.factories

java 复制代码
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.sht.hello.config.HelloAutoConfiguration

三、使用starter

pom.xml

xml 复制代码
<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.sht</groupId>
	<artifactId>startertest</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>startertest</name>
	<url>http://maven.apache.org</url>

	<properties>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.6.RELEASE</version>
	</parent>

	<dependencies>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
	
		
		<dependency>
			<groupId>com.sht</groupId>
			<artifactId>hello-spring-boot-starter</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
		
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.12</version>
		</dependency>


	</dependencies>
</project>

application.yml

java 复制代码
server:
    port: 8200

hello:
    name: leon
    address: shagnhai

App.java

java 复制代码
package com.sht.startertest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 测试定义的starter
 *
 */
@SpringBootApplication
public class App 
{
    public static void main( String[] args )
    {
    	SpringApplication.run(App.class, args);
    }
}

HelloController.java

java 复制代码
package com.sht.startertest.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.sht.hello.service.HelloService;

@RequestMapping("/hello")
@RestController
public class HelloController {
	
	@Autowired
	private HelloService helloService;
	
	@RequestMapping("/hello")
	public String hello(){
		return helloService.sayHello();
	}
}

三、源码

https://download.csdn.net/download/tangliang_cn/90021183?spm=1001.2014.3001.5501

相关推荐
鲨鱼辣钊4 小时前
【FastAPI筑基-Day19】APScheduler定时任务全实战|自动执行、动态启停、后台常驻
java·spring·fastapi
不正经学生5 小时前
C语言预处理详解:编译器真正动手之前的那些事
c语言·开发语言·算法·面试·bug
门思科技5 小时前
LoRaWAN 设备类别:Class A、B、C 对比与选型指南
c语言·开发语言·php
恋恋西风8 小时前
C++ 理解 std::thread 在单核和多核上的行为差异
开发语言·c++
学长毕业设计8 小时前
基于SpringBoot的公益基金管理系统(源码+文档+讲解视频)
java·spring boot·后端
Brilliantwxx8 小时前
【Linux】 进程(9)程序与进程地址空间(基础+进阶+面试题)
linux·运维·服务器·开发语言·c++
东小西8 小时前
【SAA实战】第 3 篇 · 工具调用全攻略:把业务能力交给 Agent 自己调度
java·后端·spring
东小西8 小时前
【SAA实战】第 4 篇 · Agent 短期记忆:saver 让 Agent 跨轮记得住(threadId 隔离)
java·后端·spring
许彰午8 小时前
22-DataCenter报文序列化
java·低代码·架构·状态模式
2601_962065259 小时前
[MySQL] SQL优化之性能分析
java·sql·mysql