尝试多次,总是会有一个坑,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相关推荐

  1. SpringBoot自定义starters

    一.简介 SpringBoot最强大的功能就是把我们常用的场景抽取成了一个个starter(场星动,我们通过引入springboot为我提供的这些场景启动器,我们再进行少量的配置就能使用相应的功能.即 ...

  2. SpringBoot如何自定义starters

    一.starter :场景启动器 SpringBoot将每个场景都抽取成一个start,通过引入starts,就能使用到相应的场景功能.即使是这样,SpringBoot也不能囊括开发中所有的场景,我们 ...

  3. springboot自定义异常处理

    springboot自定义异常处理 参考文章: (1)springboot自定义异常处理 (2)https://www.cnblogs.com/SimpleWu/p/10044468.html 备忘一 ...

  4. @retention注解作用_分分钟带你玩转SpringBoot自定义注解

    在工作中,我们有时候需要将一些公共的功能封装,比如操作日志的存储,防重复提交等等.这些功能有些接口会用到,为了便于其他接口和方法的使用,做成自定义注解,侵入性更低一点.别人用的话直接注解就好.下面就来 ...

  5. SpringBoot自定义Filter

    SpringBoot自定义Filter SpringBoot自动添加了OrderedCharacterEncodingFilter和HiddenHttpMethodFilter,当然我们可以自定 义F ...

  6. 元旦加班写SpringBoot自定义注解

    写在前面 这个点我们公司的人走的已经差不多了,原因很简单呀,明天元旦嘛,放假前可是不加班的,很nice,实习生的我,今天给大家分享一篇springboot自定义注解的技术文章. 很牛逼的注解 开发过程 ...

  7. Springboot自定义注解实现用户登录状态校验(一)

    Springboot自定义注解实现用户登录状态校验(一) 拦截器方式 定义注解类 import java.lang.annotation.*;/*** @author:小飞猪* @date:2020/ ...

  8. springboot自定义ClassLoader实现同一个jar支持多版本的使用场景【附源码】

    springboot自定义ClassLoader实现同一个jar支持多版本的使用场景 背景 最近业务提出一个业务场景:系统目前支持hive3.1.0版本的数据源适配,但是有个别部门使用的数据源是hiv ...

  9. IDEA SpringBoot 自定义Banner

    IDEA SpringBoot 自定义Banner 首先在IDEA项目中创建banner.txt文件 然后浏览器搜索SpringBoot Banner在线生成工具 选择一个自己喜欢的banner 例如 ...

最新文章

  1. 一文揭秘微服务架构统一安全认证设计与实践!
  2. python考级证书-Python 全国考级二级
  3. Windows Azure Storage (4) Windows Azure Storage Service存储服务之Blob Share Access Signature
  4. php点击按钮创建文件,PHP 文件操作类(创建文件并写入) 生成日_php
  5. 微习惯虽好,但是最重要的还是坚持
  6. 查看服务器是有有默认共享文件,服务器共享文件远程查看
  7. python itertools_itertools
  8. .net textbox全屏后自适应变大_手机屏幕太小?无套路不花钱变大屏!
  9. POJ 3080 - Blue Jeans
  10. Chrome打不开网页及设置的解决方法
  11. apfs扩容_MacBook Pro 2018 评测:这台价值一万四的电脑到底值不值得买?
  12. S5700交换机出现discarding丢弃错误处理办法
  13. windows系统软件崩溃分析
  14. 2022 七校联合NewStarCTF 公开赛赛道 WEEK3|MISC
  15. [JAVA]从零开始的“桌面宠物”之路(一):动画效果
  16. uniapp组件-uni-fav收藏按钮
  17. 绝对零度和自然常数e之间是否存在某种关系?
  18. html制作满天星,新鲜满天星如何做干花,满天星干花制作4大方法
  19. cuda 安装失败 Nsight Visual Studio Edition 11.1安装失败
  20. 电脑蓝屏重启后,js文件损坏或断电重启后文件损坏

热门文章

  1. ROS学习-tf介绍
  2. 如何利用JS防抖实现搜索框优化
  3. 7.11英语学习及笔记
  4. windows中Esc与CapsLock、Alt与Ctrl调换位置
  5. CSS-transition-过渡特效
  6. 计算机网络题库--第五单元传输层
  7. 官方纯净Windows7和10各版本介绍和下载方法
  8. Unity中关于作用力方式ForceMode的功能注解
  9. 未能连接到imap服务器,无法连接使用imap_open()
  10. dask和numpy的计算对比