SpringBoot --- 自定义 Starter
SpringBoot --- 自定义 Starter
创建
1、需要创建一个新的空工程
2、新的工程需要引入两个模块
一个Maven 模块 作为启动器
一个SpringBoot 模块 作为自动配置模块
3、在Starter 模块(即启动器模块)的 pom.xml 引入 自动配置模块
<!--启动器-->
<groupId>com.ling.starter</groupId>
<artifactId>ling-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- 引入自动配置模块-->
<dependency>
<groupId>com.ling.starter</groupId>
<artifactId>ling-spring-boot-starter-autoconfigurer</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
4、接下来主要的工作是编写自动配置包 ling-spring-boot-starter-autoconfigurer
首先,我们要明确,需要使用者配置的属性有哪些,需要编写一个类并用 @ConfigurationProperties 标注,用 prefix 明确配置的字首部分,约定后,使用者配置。
package com.ling.starter;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "ling.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;
}
}
5、接下来是编写Service 类,明确的是,以上的配置,用于哪些处理。
package com.ling.starter;
public class HelloService {
HelloProperties helloProperties;
public HelloProperties getHelloProperties() {
return helloProperties;
}
public void setHelloProperties(HelloProperties helloProperties) {
this.helloProperties = helloProperties;
}
public String syaHello(String name){ // 做业务处理
return helloProperties.getPrefix()+ "---" + name + "---" + helloProperties.getSuffix();
}
}
编写配置类(类似 xml ),注入Bean。
@Configuration //表明这是一个配置类
@ConditionalOnWebApplication //判断是否是web 工程,是则配置
@EnableConfigurationProperties(HelloProperties.class) //需要注入哪些类到容器中
public class HelloAutoconfiguration {
@Autowired
HelloProperties helloProperties;
@Bean
public HelloService helloService(){
HelloService helloService = new HelloService();
helloService.setHelloProperties(helloProperties);
return helloService;
}
}
到这里自定义 starter 已经完成。
测试
1、创建一个web 工程,测试
2、导入自定义的 starter 依赖
<!-- 测试 自定义 starter-->
<dependency>
<groupId>com.ling.starter</groupId>
<artifactId>ling-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
3、导入成功后,可以在依赖库中找到自定义 starter 的包,因为 ling-spring-boot-starter 的 pom 文件已经导入了 ling-spring-boot-starter-autoconfigurer 的依赖。所以会自动导入ling-spring-boot-starter 所依赖的包。
4、创建并配置 properties.yml 文件(配置是没有相关提示属于正常,按照约定好的字首和属性名配置即可)
ling:
hello:
prefix: 你好呀
suffix: 欢迎你。。。
5、编写Contriller 类
@RestController //非JSON 数据,可用 @RestController
/* @RestController== @ResponseBody +@Controller*/
public class HWcontroller {
@Autowired
HelloService helloService;
@RequestMapping("/hello")
public String hello(){
return helloService.syaHello("son");
}
}
6、启动工程,访问
http://localhost:8080/hello
SpringBoot --- 自定义 Starter的更多相关文章
- SpringBoot自定义starter及自动配置
SpringBoot的核心就是自动配置,而支持自动配置的是一个个starter项目.除了官方已有的starter,用户自己也可以根据规则自定义自己的starter项目. 自定义starter条件 自动 ...
- SpringBoot自定义Starter实现
自定义Starter: Starter会把所有用到的依赖都给包含进来,避免了开发者自己去引入依赖所带来的麻烦.Starter 提供了一种开箱即用的理念,其中核心就是springboot的自动配置原理相 ...
- springboot 自定义starter之AutoConfiguration【原】
八.自定义starter AutoConfiguration: 1.这个场景需要使用到的依赖是什么? 没有特别依赖的配置 2.如何编写自动配置 @Configuration //指定这个类是一个配置类 ...
- SpringBoot自定义starter开发分布式任务调度实践
概述 需求 在前面的博客<Java定时器演进过程和生产级分布式任务调度ElasticJob代码实战>中,我们已经熟悉ElasticJob分布式任务的应用,其核心实现为elasticjob- ...
- SpringBoot系列三:SpringBoot自定义Starter
在前面两章 SpringBoot入门 .SpringBoot自动配置原理 的学习后,我们对如何创建一个 SpringBoot 项目.SpringBoot 的运行原理以及自动配置等都有了一定的了解.如果 ...
- springboot自定义starter
1,创建一个空工程 2,new一个Modules ---------------- maven (启动器) : springboottest-spring-boot-starter 3,new一个M ...
- Springboot自定义starter打印sql及其执行时间
前面写到了通过实现mybatis提供的org.apache.ibatis.plugin.Interceptor接口实现了打印SQL执行时间,并格式化SQL及其参数,如果我们使用的是ssm还得再配置文件 ...
- Spring-Boot自定义Starter实践
此文已由作者王慎为授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. disconf-spring-boot-starter 使用方法: 引入maven依赖: <depen ...
- SpringBoot之旅第六篇-启动原理及自定义starter
一.引言 SpringBoot的一大优势就是Starter,由于SpringBoot有很多开箱即用的Starter依赖,使得我们开发变得简单,我们不需要过多的关注框架的配置. 在日常开发中,我们也会自 ...
随机推荐
- MySQL之字段数据类型和列属性
数据类型: 对数据进行统一的分类,从系统的角度出发,为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中将数据类型分成了三大类:数值类型.字符串类型.时间日期类型. 数值型: 数值型数据: ...
- Windows下使用图形化mount挂载磁盘到文件夹
Windows上也有类似于Linux上的mount命令,至于mount是什么: mount是Linux下的一个命令,它可以将分区挂接到Linux的一个文件夹下,从而将分区和该目录联系起来,因此我们只要 ...
- Python time gmtime()方法
描述 Python time gmtime() 函数将一个时间戳转换为UTC时区(0时区)的struct_time,高佣联盟 www.cgewang.com 可选的参数sec表示从1970-1-1以来 ...
- HTML <body> 标签
HTML <body> 标签 实例 一个简单的 HTML 文档,包含尽可能少的必需的标签: <!DOCTYPE html> <html> <head> ...
- [草稿]Skill 中的map
https://www.cnblogs.com/yeungchie/ Skill 中的map map mapc mapcan mapcar mapcon mapinto maplist
- SpringMVC文件上传下载(单文件、多文件)
前言 大家好,我是bigsai,今天我们学习Springmvc的文件上传下载. 文件上传和下载是互联网web应用非常重要的组成部分,它是信息交互传输的重要渠道之一.你可能经常在网页上传下载文件,你可能 ...
- 4.13 省选模拟赛 树 树形dp 卷积 NTT优化dp.
考试的时候 看到概率 看到期望我就怂 推了一波矩阵树推自闭了 发现 边权点权的什么也不是. 想到了树形dp 维护所有边的断开情况 然后发现数联通块的和再k次方过于困难. 这个时候 应该仔细观察一下 和 ...
- Idea快捷生成serialVersionUID
Java对象实现了Serializable接口,是需要创建serialVersionUID,避免此对象在序列化.反序列化时出现问题.但idea默认没有生成serialVersionUID的设置,需要手 ...
- win10 安装tensorflow2.0 GPU版本遇到的坑
背景:我的机器上tensorflow 1.14 & 2.0,这俩版本都有,之前都是用1.14版本,今天试一下2.0尝尝鲜, 结果就掉坑去了 把CUDA10.1 和 cudnn 安装 ...
- 关于if语句的细节
看下面两个语句: if(p->key>key) p=p->left; if(p->key<key)p=p->right; 上面的写法是很有问题的: 如果第一条条件满 ...