springboot自定义starter实践
创始人
2024-02-14 17:03:35

创建一个spring项目

仿照spring的规范,artifact命名为xxx-spring-boot-starter

 按需添加必要的依赖

这里只作为测试,就按最低的需求来只勾选如下三个

lombok、spring-boot-configuration-processor、spring-boot-autoconfigure

默认生成的项目结构如下

 

整理项目

因为我们项目最终是给其他项目依赖使用的,所以可以删除一些不需要用到的文件

删除默认生成的启动类

删除test文件

删除pom中多于的配置,主要是关于测试和打包成可启动类的

 我这配置文件application.properties也没用上,也删了

新建META-INF文件夹

在resource文件夹下新建META-INF文件夹

新建spring.factories文件

META-INF文件夹下新建spring.factories备用

最终项目结构如下

注意检查! spring.factories文件的颜色,如果颜色不对,说明配置有问题,会影响后面的引用!!!

新建Properties

新建HelloProperties,用于定义配置信息,主要包括定义配置文件的前缀和key

package cn.hello;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;@ConfigurationProperties(prefix = "spring.hello")//定义配置文件前缀
@Data
public class HelloProperties {private String username;//配置的keyprivate String age;private String address;
}

新建Service

新建HelloService,主要用于处理具体的业务

package cn.hello;import org.springframework.stereotype.Component;@Component
public class HelloService {private HelloProperties log2esProperties;public HelloService(HelloProperties log2esProperties) {this.log2esProperties = log2esProperties;}public void sayHello() {System.out.println(log2esProperties);}
}

新建AutoConfiguration

关键!配置自动装配

package cn.hello;import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.annotation.Resource;@Configuration
@EnableConfigurationProperties(HelloProperties.class)
@ConditionalOnClass(HelloService.class)
@ConditionalOnProperty(prefix = "spring.hello", value = "enabled", matchIfMissing = true)
public class HelloServiceAutoConfiguration {@Resourceprivate HelloProperties log2esProperties;@ConditionalOnMissingBean(HelloService.class)@Beanpublic HelloService log2esService(){return new HelloService(log2esProperties);}
}

编辑spring.factories

以便HelloServiceAutoConfiguration能被spring识别并管理

org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.hello.HelloServiceAutoConfiguration

一切准备就绪,运行 mvn install

 将项目打成一个jar包

 引用

随便挑选一个springboot项目,在其resources下新建一个lib文件夹,记得右键lib,

Mark Directory as Excluded

 然后再pom中引用

        cn.hellohello-spring-boot-starter0.0.1-SNAPSHOTsystem${pom.basedir}/src/main/resources/lib/hello-spring-boot-starter-0.0.1-SNAPSHOT.jar

具体业务类中引用

@Autowiredprivate HelloService helloService;@GetMapping("/helloService")//@SysOpLogAnnotation(content = "helloService", operation = "helloService")public JsonResult esService() {helloService.sayHello();JsonResult jsonResult = new JsonResult(true);jsonResult.put("article",null);return jsonResult;}

yml配置安排一下

spring:hello:username: pdage: 20address: 卡塔尔多哈

启动,测试

 

 

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...