SpringBoot SpringBoot 原理篇 2 自定义starter 2.2 IP计数业务功能开发【自定义starter】
创始人
2024-02-21 04:17:05

SpringBoot

【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】

SpringBoot 原理篇

文章目录

      • SpringBoot
      • SpringBoot 原理篇
      • 2 自定义starter
        • 2.2 IP计数业务功能开发【自定义starter】
          • 2.2.1 大概看看别人的starter
          • 2.2.2 直接开干
          • 2.2.3 小结

2 自定义starter

2.2 IP计数业务功能开发【自定义starter】

2.2.1 大概看看别人的starter

在这里插入图片描述

命名虽然可以随便,但是还是尽量和人家的像一点

而且,这些starter 是分成两部分的

在这里插入图片描述

这里面好像没有功能,在上面的自动配置里面

在这里插入图片描述

org → … → data → redis

在这里插入图片描述

这里面就有它的自动配置类 了

先把坐标定义出来, 然后做了一个工程

看看MP 的

在这里插入图片描述

好像也是这样哈

【咱们就一个模块搞定,像druid 那样】

在这里插入图片描述

2.2.2 直接开干

创建一个全新的SpringBoot 工程模块

在这里插入图片描述

依赖都不勾

在这里插入图片描述

直接创建,上来先把SpringBoot 的版本改掉

在这里插入图片描述

OK, 一个全新的SpringBoot 工程

大概修改一下pom 文件

不要测试依赖、也不要maven 插件

在这里插入图片描述

把测试直接拿掉了,已经无意义了

在这里插入图片描述

在这里插入图片描述

OK,结构的空壳就起来了

【业务类】

先导入web 包

org.springframework.bootspring-boot-starter-web

在这里插入图片描述

package cn.dingjiaxiong.service;import org.springframework.beans.factory.annotation.Autowired;import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;/*** ClassName: IpCountService* date: 2022/10/25 16:49** @author DingJiaxiong*/public class IpCountService {private Map ipCountMap = new HashMap();@Autowiredprivate HttpServletRequest httpServletRequest; //当前的request 对象的注入工作由使用当前starter的工程提供自动装配//调用这个方法,就可以统计ip的访问次数public void count() {System.out.println("==============================================");//每次调用当前操作,就记录当前访问的IP,然后累加访问次数//1. 获取当前操作的IP地址String ip = httpServletRequest.getRemoteAddr();//2. 根据IP地址从Map取值,并递增Integer count = ipCountMap.get(ip);if (count == null){ipCountMap.put(ip,1);}else{ipCountMap.put(ip,ipCountMap.get(ip) + 1);}}}

OK, 做业务就是这样了

【自动配置类】

package cn.dingjiaxiong.autoconfig;/*** ClassName: IpAutoConfiguration* date: 2022/10/25 17:15** @author DingJiaxiong*/public class IpAutoConfiguration {
}

【创建META-INF 的 spring.factories,让它自动配置】

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\cn.dingjiaxiong.autoconfig.IpAutoConfiguration

在这里插入图片描述

实现一下配置类

package cn.dingjiaxiong.autoconfig;import cn.dingjiaxiong.service.IpCountService;
import org.springframework.context.annotation.Bean;/*** ClassName: IpAutoConfiguration* date: 2022/10/25 17:15** @author DingJiaxiong*/public class IpAutoConfiguration {@Beanpublic IpCountService ipCountService(){return new IpCountService();}}

OK了,现在我们已经可以直接在08 SSMP 中去使用这个starter 了

不过要先安装到仓库中,【先clean 再 install】

在这里插入图片描述

OK,在08 中导入坐标

cn.dingjiaxiongip_spring_boot_starter0.0.1-SNAPSHOT

在这里插入图片描述

这样这个模块就进来了

调用一下

修改controller

@Autowired
private IpCountService ipCountService;@GetMapping("/{currentPage}/{pageSize}")
public R getPage(@PathVariable int currentPage, @PathVariable int pageSize,Book book) {ipCountService.count();IPage page = bookService.getPage(currentPage, pageSize,book);//如果当前页码值大于了总页码值,那么重新执行查询操作,使用最大页码值作为当前页码值if (currentPage > page.getPages()){page = bookService.getPage((int) page.getPages(),pageSize);}return new R(null != page, page);
}

为了更好的查看到效果

package cn.dingjiaxiong.service;import org.springframework.beans.factory.annotation.Autowired;import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;/*** ClassName: IpCountService* date: 2022/10/25 16:49** @author DingJiaxiong*/public class IpCountService {private Map ipCountMap = new HashMap();@Autowiredprivate HttpServletRequest httpServletRequest; //当前的request 对象的注入工作由使用当前starter的工程提供自动装配//调用这个方法,就可以统计ip的访问次数public void count() {//每次调用当前操作,就记录当前访问的IP,然后累加访问次数//1. 获取当前操作的IP地址String ip = httpServletRequest.getRemoteAddr();System.out.println("==============================================" + ip);//2. 根据IP地址从Map取值,并递增Integer count = ipCountMap.get(ip);if (count == null){ipCountMap.put(ip,1);}else{ipCountMap.put(ip,ipCountMap.get(ip) + 1);}}}

改了下打印

记得重新clean 、安装一下

在这里插入图片描述

OK, 直接启动SSMP

在这里插入图片描述

效果很明显,已经拿到了。OK,这就说明程序已经跑通了

OK回顾一下

业务功能开发

在这里插入图片描述

自动配置类

在这里插入图片描述

配置

在这里插入图片描述

模板调用

在这里插入图片描述

2.2.3 小结
  1. 使用自动配置加载业务功能
  2. 切记使用之前先clean后install安装到maven仓库,确保资源更新

相关内容

热门资讯

白日依山尽,黄河入海流 “白日依山尽,黄河入海流。”出处 出自 唐代 王之涣 的《登鹳雀楼》“白日依山尽,黄河入海流。”全诗...
描写冬至的诗句 描写冬至的诗句  冬至兼具自然与人文两大内涵,既是自然节气点,也是一个传统的祭祀祖先和神灵的'节日。...
赞美妇女节的诗句 赞美妇女节的诗句  赞美妇女节的诗句(精选110句)  在我们平凡的日常里,大家都经常接触到诗句吧,...
《湖心亭看雪》赏析 《湖心亭看雪》赏析  1,《湖心亭看雪》赏析  在我国古代文学作品里,有许多以西湖为题材的名篇佳作。...
六月二十七日望湖楼醉书的原文... 六月二十七日望湖楼醉书的原文翻译以及赏析  无论是身处学校还是步入社会,说到古诗,大家肯定都不陌生吧...