SpringBoot-自定义starter

Spring Boot拦截器(Interceptor)详解 在拦截器当中,我们通常也是做一些通用性的操作,比如:我们可以通过拦截器来拦截前端发起的请求,将登录校验的逻辑全部编写在拦截器当中。方法,这个方法执行完成后需要返回一个布尔类型的值,如果返回true,就表示放行本次操作,才会继续访问controller中的方法;以上就是拦截器的执行流程。,表示拦截所有资源,而在配置拦截器时,不仅可以指定要拦截哪些资源,还可以指定不拦截哪些资源,只需要调用。首先我们先来看拦截器的拦截路径的配置,在注册配置拦截器的时候,我们要指定拦截器的拦截路径,通过。 阅读详情


在SpringBoot中我们需要引入一项新的技术或者功能,往往只是在pom中引入相应的坐标这样简单就完成了,那么现在我们先尝试一下自定义一个starter模块,然后再使用一下

模块功能

在web应用中加入一个访问检测器,每当有用户访问网页时,后台打印出其ip地址和访问次数

实现过程

  • 需要一个web依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • 创建一个新的模块,实现一个业务类,具体功能如下
public class IpCount {
  private Map<String,Integer> ipCountMap = new HashMap<>();

  @Autowired
  private HttpServletRequest request;
  public void count(){
    String ipAddress = request.getRemoteAddr();
    if (ipCountMap.containsKey(ipAddress)){
      ipCountMap.put(ipAddress,ipCountMap.get(ipAddress)+1);
    }
    else {
      ipCountMap.put(ipAddress,1);
    }
    System.out.println("ipAddress:"+ipAddress+"count:"+ipCountMap.get(ipAddress));
  }
}
@Autowired
private HttpServletRequest request;

HttpServletRequest的bean由使用这个模块的项目提供

  • 创建一个自动配置类,并初始化刚刚创建的业务类的bean
public class IpAutoConfiguration {
  @Bean
  public IpCount ipCount(){
    return new IpCount();
  }
}
  • 在resources下创建META-INF/spring.factories文件,将自动装配信息填入
    这样就会自动配置IpAutoConfiguration类的bean,同时启动它所依赖的所有bean
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  cn.ipcount.autoconfig.IpAutoConfiguration

写好之后用maven上传到本地的库中

  • 在需要使用的项目中引入这个依赖即可
<dependency>
    <groupId>cn.ipcount</groupId>
    <artifactId>ipcount_spring_boot_starter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>
  • 现在就可以将其当做一个普通的第三方包使用了
@RestController
@RequestMapping("/account")
public class AccountController {

  @Autowired
  IpCount ipCount;
  @GetMapping
  public String getAccount(){
    ipCount.count();
    System.out.println("get...");
    return "success";
  }
}

定义属性

现在我们需要能够自定义属性,在使用时没有配置属性就用默认属性,配置了属性就使用配置的属性

  • 创建一个配置类
    这里仅仅设置一个简易的属性note,默认为"检测到用户访问"
@ConfigurationProperties(prefix = "ipcount")
public class IpProperties {
  private String note = "检测到用户访问";

  public String getNote() {
    return note;
  }

  public void setNote(String note) {
    this.note = note;
  }
}
  • 在自动装配类中启用配置
@EnableConfigurationProperties(IpProperties.class)
public class IpAutoConfiguration {
  @Bean
  public IpCount ipCount(){
    return new IpCount();
  }
}
  • 简单修改一下业务类中的方法,直接让其打印出note
public class IpCount {
  private Map<String,Integer> ipCountMap = new HashMap<>();

  @Autowired
  private IpProperties ipProperties;
  @Autowired
  private HttpServletRequest request;
  public void count(){
    String ipAddress = request.getRemoteAddr();
    if (ipCountMap.containsKey(ipAddress)){
      ipCountMap.put(ipAddress,ipCountMap.get(ipAddress)+1);
    }
    else {
      ipCountMap.put(ipAddress,1);
    }
    System.out.println(ipProperties.getNote());
    System.out.println("ipAddress:"+ipAddress+"count:"+ipCountMap.get(ipAddress));
  }
}

现在,如果没有配置属性,程序会在运行时打印默认的参数,如果在项目中配置了这个属性,那么则会打印配置的值

ipcount:
  note: "test"
test
ipAddress:[0:0:0:0:0:0:0:1]count:1
get...

加一个拦截器

这个模块目前只能在一个account-get请求里面使用,我们希望在所有资源请求都使用这个功能,于是想到了使用拦截器,当然也可以使用AOP,但是这是一个web应用,优先考虑拦截器。关于拦截器的知识也在之前的文章中已经解释过

  • 自定义拦截器
public class IpInterceptor implements HandlerInterceptor {
  @Autowired
  private IpCount ipCount;

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
      throws Exception {
    ipCount.count();
    return true;
  }
}
  • 设置核心配置类,加载拦截器
@Configuration
public class SpringMvcConfig implements WebMvcConfigurer {
  @Bean
  public IpInterceptor interceptor(){
    return new IpInterceptor();
  }

  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(interceptor()).addPathPatterns("/**");
  }
}
  • 在IpAutoConfiguration中引入SpringMvcConfig
@EnableConfigurationProperties(IpProperties.class)
@Import(SpringMvcConfig.class)
public class IpAutoConfiguration {
  @Bean
  public IpCount ipCount(){
    return new IpCount();
  }
}

ok,这样一来我们就给模块加上了拦截器,并且成功定义了一个相对完整的starter,进一步了解了SpringBoot的自动装配机制

SpringBoot中自定义Starter 1. 前置知识1-1 什么是Starter?1-2 常用的Condition注解说明1-3 Starter的命名规范2. 自定义自己的Starter示例2-1 创建Starter项目2-2 Pom.Xml【示例引入了spring-boot-starter和lombok】2-3-1 配置类:PersonProperties2-3-2 业务类:PersonService2-3-3 自动配置类:PersonAutoConfiguration2-4 创建spring.factories文件。 阅读详情

相关推荐

【SpringBoot】配置 interceptor 拦截器

本文介绍了Spring Boot中拦截器的配置与使用。通过实现HandlerInterceptor接口可以创建拦截器,包含preHandle、postHandle和afterCompletion三个方法。单个拦截器配置通过WebMvcConfigurer实现,多个拦截器会形成拦截器链,其执行顺序遵循先进后出原则。

死牛胖子的技术随笔 736

彻底搞懂 SpringBoot 中的 starter 机制

前言我们都知道,Spring的功能非常强大,但也有些弊端。比如:我们需要手动去配置大量的参数,没有默认值,需要我们管理大量的jar包和它们的依赖。为了提升Spring项目的开发效率,简化一些配置,Spring官方引入了SpringBoot。当然,引入SpringBoot还有其他原因,在这里就不过多描述了。本文重点跟大家一起聊聊SpringBoot的starter机制,因为它太重要了。1 为什么要用...

磊哥聊Java 1754

springboot自定义starter | Spring Boot 6

1、什么是线程池 2、Java自带有哪几种线程池 3、Java中有几种类型的流 4、字节流如何转为字符流 5、请写出你最常见的5个RuntimeException 6、JVM内存分哪几个区,每个区的作用是什么? 7、heap和stack有什么区别 8、Java类加载过程 9、什么是类加载器,类加载器有哪些 10、Java中垃圾收集的方法有哪些 11、如何判断一个对象是否存活(或者GC对象的判断方法) 12、简述Java内...

学Java,找哪吒 4704

mybatis-spring-boot-starter配置mybatis的插件(Interceptor)

记录一下mybatis-spring-boot-starter配置mybatis插件. 以前使用mybatis的自定义插件的时候都是使用xml的配置形式来配置,现在使用starter的时候突然一下不知道怎么配置了,这里记录一下怎么配置mybatis的插件。 参考链接 spring boot 中如何设置mybatis的插件 使用starter 现在使用springboot项目引入组件基本都是使用starter的形式来引用了。 <dependency> <grou.

madman 3973

如何解决Windows系统中缺失oem*.inf文件导致的软件运行问题

本文详细解析了Windows系统中因oem*.inf文件缺失导致软件无法运行的常见问题。文章阐述了oem*.inf文件作为安装信息文件的重要作用,并提供了从精准定位文件路径、安全获取与替换文件的手动修复步骤,到利用专业工具进行一站式修复的完整解决方案。最后,还给出了从软件安装来源、卸载习惯到系统维护等方面的预防措施,帮助用户彻底避免此类问题。

water的专栏 547

UFS 功能描述:UFS boot

UFS 启动过程介绍:启动配置,启动代码下载过程和安全性

m0_51720747的博客 1601

SpringBoot实战之5 注册interceptor

前言HandleInterceptor的功能跟Filter类似,但是范围要小一些,只拦截webmvc的接口请求,不拦截静态资源。即request请求之前有拦截方法,request请求之后有拦截方法。实现方法实现自定义拦截器需要3步:1、创建我们自己的拦截器类并实现 HandlerInterceptor 接口。2、创建一个Java类继承WebMvcConfigurerAdapter,并重写 addIn

Mr.Robot 7859

FPGA学习笔记(一)入门背景、软件及时钟约束的概念及程序下载与固化

使用正点原子的PFPGA开拓者V2学习,通过b站上正点原子的手把手教你学FPGA-基于开拓者V2学习。

贾saisai的博客 3280

SpringBoot之自定义starter

目录 一、什么是SpringBoot starter机制 二、为什么要自定义starter 三、什么时候需要创建自定义starter 四、自动加载核心注解说明 五、自定义starter的开发流程 案例一:为短信发送功能创建一个starter 案例二:AOP方式统一服务日志 一、什么是SpringBoot starter机制 SpringBoot中的starter是一种非常重要的机制(自动化配置),能够抛弃以前繁杂的配置,将其统一集成进starter,应用者只需要在maven中引入sta.

qq_52445443的博客 1万+

基于Simulink的锂电池热模型与温控管理仿真

本文完成了基于Simulink的锂电池热模型与温控管理仿真,实现了:✅ 建立电-热耦合产热模型✅ 构建集总参数热网络✅ 设计基于迟滞的风扇启停控制✅ 验证在高倍率工况下的有效温控能力✅ 为实际电池热管理系统(BTMS)提供设计原型。

xiaoheshang_123的博客 149

AI一键生成带货短视频:电商直播的未来

随着电子商务行业的快速发展,直播带货已成为一种极为有效的营销手段。然而,传统的人工直播方式存在诸多局限性,如人力成本高、主播培训周期长等问题。为了解决这些挑战,一种基于AI技术的一键生成带货视频解决方案应运而生——这就是“Anchor Crafter”。这项创新技术不仅能够自动创建高质量的带货视频,而且还能实现人物与商品之间的自然交互,极大地提升了用户体验。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 2206

【Spring Boot】自定义springboot starter

自定义springboot starter

qq_41466440的博客 1139

Vue+OpenLayers:解决中国境内OpenStreetMap地图加载问题

然而,在使用OpenLayers和Vue框架搭建地图应用时,很多中国开发者可能会遇到一个常见问题:OpenStreetMap(OSM)地图无法正常加载。为了解决这个问题,我们可以使用其他方式获取地图数据,比如使用国内的地图服务提供商。通过使用国内地图服务商提供的地图数据,我们可以解决OpenStreetMap地图加载问题。然后,我们创建一个OpenLayers地图对象,并指定地图图层的源为国内地图服务商提供的地图URL。属性,可以将地图的中心点和缩放级别调整到我们需要的位置。

CodeWhizZ的博客 8275

SpringBoot四大核心之starter——自定义starter

四大核心 1、starter:jar包的引入,解决jar版本冲突问题 2、自动装配:简单配置甚至零配置即可运行项目 3、actuator:springboot程序监控器 4、CLI:命令行 starter starter的命名有一种习惯,官方的starter一般都是spring-boot-starter-xxx,而我们自定义的starter一般都是xxx-spring-boot-starter。 首先我们需要明白一件事,就是我们自定义的bean是可以自动装配过来的,而我们第三方自定义的starter

1万+

Prism 入门02,区域介绍

什么是区域(Region)?区域,在Prism 框架中,区域是模块化的核心的功能之一,其主要作用是降低应用程序和模块之间的耦合度。使用方式:在应用程序的界面中,划分出某块区域,并为这个区域定义一个唯一的区域名称。那么通过这个区域名称,应用程序就可以找到指定的区域。并为这个区域动态放置一些容器或控件,从而呈现在界面中。

build2024 1126

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【SpringBoot】实现自定义 spring-boot-starter

Spring Boot 的依赖管理、实现一个自定义的 spring-boot-starter

sun_tantan的博客 1648

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【Springboot】自定义starter

想要自定义starter,首先要了解springboot是如何加载starter的,也就是springboot的自动装配机制。SpringBoot中的starter是一种非常重要的机制(自动化配置),能够抛弃以前繁杂的配置,将其统一集成进starter,应用者只需要在maven中引入starter依赖,SpringBoot就能自动扫描到要加载的信息并启动相应的默认配置。starter让我们摆脱了各种依赖库的处理,需要配置各种信息的困扰。

weixin_44823875的博客 1964

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SpringBoot-自定义Starter精华版

​ 开发的自定义 Starter 需求是,项目依赖starterTest-spring-boot-starter,starterTest-spring-boot-starter 又加载HelloAutoConfiguration,HelloAutoConfiguration自动产生HelloService,项目中引入 starterTest-springboot-start后,用户便可以使用HelloAutoConfiguration 产生的 HelloService 了

小孔靠得住的博客 2157

【SpringBoot】Spring Boot Starter 详解与实战:手把手自定义 Starter

在传统 Spring 项目中,如果我们想使用Spring + MyBatis + Druid 连接池,通常需要手动添加多个依赖,并编写相关配置:</</</</</</</</然后还要写DataSource配置类、MyBatis 配置等。而的作用就是把这些繁琐的配置封装起来,让开发者只需要引入一个 Starter 依赖,即可自动装配所有组件。例如,使用只需这样:</</</无需手动配置DataSource,Spring Boot 会自动装配数据库相关的 Bean,大大减少了开发成本。

工一木子 2372

重学SpringBoot3-自定义starter

Spring Boot 简化了基于 Spring Framework 的应用程序开发,Spring Boot 的核心功能之一就是 Starter,它极大简化了项目的依赖管理和配置,帮助开发者快速启动项目。而在 Spring Boot 3 中,Starter 仍然是一个至关重要的组件,并进行了很多改进和增强。

CoderJia的学习之路 1644

SpringBoot自定义starter

简化依赖管理:通过将常用的依赖和配置封装到一个starter中,可以避免在每个项目中手动添加和管理这些依赖,从而减少了开发人员的工作量和错误的可能性。提高开发效率:自定义starter能够自动加载所需的配置和组件,帮助开发团队快速搭建具备特定功能的项目骨架。这样开发者可以更专注于业务逻辑的实现,而不是花费时间在配置上。便于维护和升级:当需要更新或升级功能时,只需修改自定义starter,所有依赖于该功能的项目都可以从更新中受益,无需逐个修改每个项目。推广和共享。

2302_78041486的博客 1152

SpringBoot 自定义 Starter:从零开发一个私有 Starter

用过 SpringBoot 的都知道,引入一个 starter(比如 spring-boot-starter-web、spring-boot-starter-redis),就能实现开箱即用,不用手动配置。答:SpringBoot 启动时,会通过 SpringFactoriesLoader 工具类,读取 classpath 下 META-INF/spring.factories 文件,该文件中配置了自动配置类的全类名,SpringBoot 会加载这些自动配置类,结合条件注解筛选后,注入对应的 Bean。

。。。 1172
上一篇: SpringBoot原理篇-Bean的8种加载方式
下一篇: 阿里研发工程师JAVA暑期实习一面
南懿烨曦
博客等级 码龄6年 108粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值