IDEA实现SpringBoot自定义Starters
尝试多次,总是会有一个坑,Maven安装Starters成功,可以在External Libraries看到打包好的jar,也能打开里面源码文件,但是没法在项目中引用的情况。
最后参考https://blog.csdn.net/qq_37934687/article/details/78616079测试成功,原因不得知。
首先创建一个Maven的空工程,什么框架都不用选。
然后工程里的test文件夹删掉,用不到。
打开pom.xml文件,配置如下:
<?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.su</groupId><artifactId>spring-boot-starter-su</artifactId><version>1.0.0</version><packaging>jar</packaging><properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId><version>2.5.0</version></dependency></dependencies></project>
修改成自己想要的信息
注:如果想要将自己做的starters贡献给网络,方便学习者使用,请把artifactId的值按标准填入:spring-boot-starter-{name}
<groupId>com.su</groupId>
<artifactId>spring-boot-starter-su</artifactId>
<version>1.0.0</version>
下面引入自动配置的依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.5.0</version>
</dependency>
</dependencies>
业务类HelloService:
package com.su;
public class HelloService {private String msg;public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public String haloHello(){return "Hello Starter ===============>>>"+msg;}
}
配置类HelloProperties:
package com.su;import org.springframework.boot.context.properties.ConfigurationProperties;@ConfigurationProperties(prefix = "hello")
public class HelloProperties {private String msg="world";public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}
}
这个配置类在引入@ConfigurationProperties注解后页面上方会提醒一个Springboot未配置的警告,不用理睬。
有了配置类,还需要一个自动配置类HelloAutoConfiguration来操作配置类
package com.su;import org.springframework.beans.factory.annotation.Autowired;
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;@Configuration
@EnableConfigurationProperties(HelloProperties.class)
@ConditionalOnClass(HelloService.class)
@ConditionalOnProperty(prefix = "hello",value = "enabled",matchIfMissing = true)
public class HelloAutoConfiguration {@Autowiredprivate HelloProperties helloProperties;@Bean@ConditionalOnMissingBean(HelloService.class)public HelloService helloService() {System.out.println("Execute Create New Bean");HelloService helloService=new HelloService();helloService.setMsg(helloProperties.getMsg());return helloService;}}
在resources下自定义 META-INF/spring.factories文件
里面填入如下代码:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.su.HelloAutoConfiguration
第一行固定不变,指定工作是自动配置,第二行是自动配置类的包名及类名
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
包名.类名
完成上述操作后
使用maven工具将制作好的starters安装到本地maven仓库
在这里搜索mvn install,点击安装,控制台会提示构建完成
然后就可以测试了。
创建个基础的springboot项目,pom.xml文件中引入依赖
这里值得注意的一个问题是,idea上的maven工具好像会缓存本地仓库表,因此添加了新的starters并不能被直接识别到,需要现在IDEA的setting中Build,Execution,Deployment ------->Build Tools------>Maven-------->Repositories,选择本地仓库,进行update。
然后在pom.xml中引入自定义的starters就会自动识别并提示,
<dependency><groupId>com.su</groupId><artifactId>spring-boot-starter-su</artifactId><version>1.0.0</version> </dependency>
更新pom.xml,
就可以在自己的代码中引入starters并使用了。如下方测试用例
package com.example.demo;import com.su.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@SpringBootApplication
public class DemoApplication {@AutowiredHelloService helloService;@RequestMapping("/test")public String hello(){return helloService.haloHello();}public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}
这里引用自定义starters中的HelloService自动装配时会出现报错,是idea的检测问题,不影响直接运行。
测试结果:
Hello Starter ===============>>>world
IDEA实现SpringBoot自定义Starters相关推荐
- SpringBoot自定义starters
一.简介 SpringBoot最强大的功能就是把我们常用的场景抽取成了一个个starter(场星动,我们通过引入springboot为我提供的这些场景启动器,我们再进行少量的配置就能使用相应的功能.即 ...
- SpringBoot如何自定义starters
一.starter :场景启动器 SpringBoot将每个场景都抽取成一个start,通过引入starts,就能使用到相应的场景功能.即使是这样,SpringBoot也不能囊括开发中所有的场景,我们 ...
- springboot自定义异常处理
springboot自定义异常处理 参考文章: (1)springboot自定义异常处理 (2)https://www.cnblogs.com/SimpleWu/p/10044468.html 备忘一 ...
- @retention注解作用_分分钟带你玩转SpringBoot自定义注解
在工作中,我们有时候需要将一些公共的功能封装,比如操作日志的存储,防重复提交等等.这些功能有些接口会用到,为了便于其他接口和方法的使用,做成自定义注解,侵入性更低一点.别人用的话直接注解就好.下面就来 ...
- SpringBoot自定义Filter
SpringBoot自定义Filter SpringBoot自动添加了OrderedCharacterEncodingFilter和HiddenHttpMethodFilter,当然我们可以自定 义F ...
- 元旦加班写SpringBoot自定义注解
写在前面 这个点我们公司的人走的已经差不多了,原因很简单呀,明天元旦嘛,放假前可是不加班的,很nice,实习生的我,今天给大家分享一篇springboot自定义注解的技术文章. 很牛逼的注解 开发过程 ...
- Springboot自定义注解实现用户登录状态校验(一)
Springboot自定义注解实现用户登录状态校验(一) 拦截器方式 定义注解类 import java.lang.annotation.*;/*** @author:小飞猪* @date:2020/ ...
- springboot自定义ClassLoader实现同一个jar支持多版本的使用场景【附源码】
springboot自定义ClassLoader实现同一个jar支持多版本的使用场景 背景 最近业务提出一个业务场景:系统目前支持hive3.1.0版本的数据源适配,但是有个别部门使用的数据源是hiv ...
- IDEA SpringBoot 自定义Banner
IDEA SpringBoot 自定义Banner 首先在IDEA项目中创建banner.txt文件 然后浏览器搜索SpringBoot Banner在线生成工具 选择一个自己喜欢的banner 例如 ...
最新文章
- 一文揭秘微服务架构统一安全认证设计与实践!
- python考级证书-Python 全国考级二级
- Windows Azure Storage (4) Windows Azure Storage Service存储服务之Blob Share Access Signature
- php点击按钮创建文件,PHP 文件操作类(创建文件并写入) 生成日_php
- 微习惯虽好,但是最重要的还是坚持
- 查看服务器是有有默认共享文件,服务器共享文件远程查看
- python itertools_itertools
- .net textbox全屏后自适应变大_手机屏幕太小?无套路不花钱变大屏!
- POJ 3080 - Blue Jeans
- Chrome打不开网页及设置的解决方法
- apfs扩容_MacBook Pro 2018 评测:这台价值一万四的电脑到底值不值得买?
- S5700交换机出现discarding丢弃错误处理办法
- windows系统软件崩溃分析
- 2022 七校联合NewStarCTF 公开赛赛道 WEEK3|MISC
- [JAVA]从零开始的“桌面宠物”之路(一):动画效果
- uniapp组件-uni-fav收藏按钮
- 绝对零度和自然常数e之间是否存在某种关系?
- html制作满天星,新鲜满天星如何做干花,满天星干花制作4大方法
- cuda 安装失败 Nsight Visual Studio Edition 11.1安装失败
- 电脑蓝屏重启后,js文件损坏或断电重启后文件损坏