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

相关推荐
无籽西瓜a1 分钟前
ArrayList和LinkedList的区别
java
Elieal5 分钟前
@Api 系列注解
java·开发语言
Remember_9936 分钟前
【数据结构】深入理解Map和Set:从搜索树到哈希表的完整解析
java·开发语言·数据结构·算法·leetcode·哈希算法·散列表
小楼v7 分钟前
消息队列的核心概念与应用(RabbitMQ快速入门)
java·后端·消息队列·rabbitmq·死信队列·交换机·安装步骤
浅念-8 分钟前
C++第一课
开发语言·c++·经验分享·笔记·学习·算法
Coding茶水间8 分钟前
基于深度学习的路面裂缝检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
开发语言·人工智能·深度学习·yolo·目标检测·机器学习
charlie11451419111 分钟前
现代嵌入式C++教程:对象池(Object Pool)模式
开发语言·c++·学习·算法·嵌入式·现代c++·工程实践
小北方城市网12 分钟前
接口性能优化实战:从秒级到毫秒级
java·spring boot·redis·后端·python·性能优化
小北方城市网14 分钟前
Redis 缓存设计与避坑实战:解决穿透 / 击穿 / 雪崩
java·大数据·数据库·redis·python·elasticsearch·缓存