1 Star 6 Fork 3

长路 / JAVA-手写及整合demo案例

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

[toc]

MyDIY(手写系列)

Mybatis(Mybatis源码手写相关)

03-1、Mybatis-spring

介绍

image-20210823231932982

功能描述:实现Mybatis-spring依赖中的@MapperScan功能,目的是将mybatis产生的代理类通过@MapperScan注入到Spring容器。

参考视频这可能是B站讲的最好的SPRING源码教程(2021年最新版)中的36-40集,介绍了mybatis的代理类如何生成以及注入代理类到Spring容器!

对应自己文档

image-20210823232350297


运行项目

step1:导入sql文件

image-20210823223602776

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `last_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
  `age` int(11) NULL DEFAULT NULL COMMENT '年龄',
  `email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱',
  `deleted` int(1) NULL DEFAULT 1 COMMENT '逻辑删除\r\n',
  `gmt_create` datetime(0) NULL DEFAULT NULL COMMENT '创建日期',
  `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '修改日期',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1428384446647291906 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'changlu', 22, '368', 1, NULL, '2021-08-19 00:26:56');
INSERT INTO `user` VALUES (2, 'Tom', 28, 'test3@baomidou.com', 1, NULL, '2021-08-19 00:26:56');
INSERT INTO `user` VALUES (3, 'Billie', 23, 'test5@baomidou.com', 1, NULL, '2021-08-19 00:27:25');
INSERT INTO `user` VALUES (4, 'xiaoli', 11, '86578954@qq.com', 1, NULL, '2021-08-19 00:26:56');
INSERT INTO `user` VALUES (1428010279540023298, 'xiaotian', 18, '86547528@qq.com', 0, NULL, '2021-08-19 00:26:56');
INSERT INTO `user` VALUES (1428037780849168385, 'mining', 28, '86547528@qq.com', 1, '2021-08-19 00:55:13', '2021-08-19 00:55:37');
INSERT INTO `user` VALUES (1428384446647291905, 'xiaomei', 20, '86547528@qq.com', 1, '2021-08-19 23:52:45', '2021-08-19 23:52:45');

SET FOREIGN_KEY_CHECKS = 1;
```

step2:运行项目即可!


MyRPC(手写RPC框架案例)

详细说明可进入到对应目录README.MD:GiteeGithub

MyStaticServer(手写静态服务器简单实现)

介绍

手写静态资源服务器参考视频:IT楠老师-手写服务器

资源路径(当前目录):01、MyStaticServer

image-20210517215450808

  • Server:主类,用于启动服务器。
  • MsgRunnable:自定义线程类,用于处理接收到的请求。
  • RequestResponse:封装的请求响应对象。
  • HttpUtils:工具类,两个方法一个是获取指定路径下的文件资源转成String、另一个是封装响应的数据。

服务器说明:当前仅仅只是一个静态资源访问服务器,可访问http://localhost:8899/xxx.html 的静态页面。



测试服务器

①idea中运行

编译后需要在指定目录下添加pages目录,接着将html页面放入即可。

image-20210516095929265

运行效果

image-20210516100018990



②项目打jar包测试

下面该目录文件在本仓库中的MyStaticServer/jartest目录中,直接使用即可!

下面在windows环境中测试,linux同样是该目录,执行startup.sh启动!

将打好的jar包放置到文件目录下,在当前目录中添加一个pages文件,其中添加静态资源即可!

image-20210516100548827

双击startup.bat即可启动服务器。

测试效果:

image-20210516100837947



MyServet(手写Tomcat中的Servlet容器)

介绍

手写Servlet容器参考视频:【2021就业班】javaweb深入讲解,手写servlet容器,持续更新中...

资源路径(当前目录):02、MyServlet

image-20210517215929765

  • servlet目录:包含一个servlet接口,实现接口的GenericServlet,继承GenericServlet的HttpServlet(封装了doGet()以及doPost()方法)。Request与Response是封装的请求与响应。
  • controller目录:包含多个servlet,用来封装业务。
  • catalina:启动类,用于启动服务器,监听请求等。
  • container:可以看做是Servlet容器,包含了多个Servlet。
  • 配置文件web.properties:包含了url以及对应的servlet全类名路径的键值对。

服务器说明:仿写Tomcat中的Servlet,可根据url配对指定的servlet,并根据请求方式来执行doGet或doPost方法。



测试服务器

配置文件web.properties:存储了对应的请求地址与servlet的关系

/index=xyz.changlu.controller.IndexServlet
/home=xyz.changlu.controller.HomeServlet
/info=xyz.changlu.controller.IndexServlet

每当一个请求来临时,根据指定的url来获取到指定的servlet并执行请求。

测试

启动catalina.java

image-20210518090348538

访问请求

image-20210518090437427

image-20210518090450990



SpringCloud(手写各类简易版组件)

my-openfeign(手写简易版openfeign)

启动eureka-server注册中心,然后启动order-service订单服务,之后运行对应test测试用例的手写案例,即可得到结果:

image-20220718154557814

对应手写学习教程:手写feign的过程

对应章节笔记:04、SpringCloud之Feign组件学习笔记

my-hystrix(手写简易版hystrix)

image-20220718154948687

对应手写学习教程:手写断路器

对应学习笔记:05、SpringCloud之Hystrix组件学习笔记


java-lear23designpatterns

设计模式java实现

2021.3.23—现在暂且学习10种设计模式(抽象工厂模式、单例模式、工厂方法模式、建造者模式、代理模式、适配器模式、策略模式、观察者模式、模板方法模式、责任链模式)

  • xyz.changlu.adapter:适配器模式

  • xyz.changlu.builder:建造者模式

  • xyz.changlu.chain:责任链模式

  • xyz.changlu.factory:工厂模式(简单工厂、工厂方法模式、抽象工厂模式)

  • xyz.changlu.observer:观察者模式

  • xyz.changlu.proxy:代理模式

  • xyz.changlu.singleton:单例模式

  • xyz.changlu.strategy:策略模式

  • xyz.changlu.template:模板方法模式



SpringSecurity

01、动态绑定用户权限接口

提前准备操作

创建一个test数据库,接着导入文件中的sql语句。


说明

image-20210920000541648

通过在数据库定义用户、角色、权限三个表来动态的添加账号用户权限到spring security。

并且其中还集成了自定义login页面以及自定义403页面,使用的form表单认证形式。

详细代码说明可见

image-20210920121758637



02、springsecurity整合oauth2

包含两个服务:授权服务端、会员服务端。

整个模式与qq登陆、微信登陆、支付都是类似,通过appid、secret换取到code,接着服务器端拿到code值去得到accesstoken。

最终通过accesstoken来去访问一些会员接口。

详细文档说明见

image-20210920122031553

demo1-demo05

位置

image-20220326095514153

文档见:各个项目demo描述见其中的README.md

image-20220326095555291



RabbitMQ

01、02部分

image-20210925142756284

分别对应笔记

  • 01包含三个demo,如上图。
  • 02是springboot集成rabbitmq的案例,其中使用的是topic类型

image-20210925142836264



JUC

学习指南

学习时间:2021.3.26-2021.4.7

这段时间学习了下JUC,说下学习过程吧。入门JUC,建议先要有一些多线程的基础。

①可以先去掌握一些基础知识点可以看《实战Java高并发程序设计》第一章节。

②有了基础之后,建议可以先看狂神的视频入门(也就是下面第一个视频),看的过程中你需要去实操去看一些源码,结合查阅博客大致去了解更全面的一些知识点,很多视频有些讲的是很浅显的,千万不要视频看完了就觉得这部分知识点你都掌握了!!!

③狂神的看完之后,我是又快速的刷了下IT楠老师(下面第二个视频)的视频,他的视频知识点没有狂神讲的细,有些狂神讲的还是很好的比如说线程池的七大属性它的例子让我记忆很深刻。IT楠老师也有讲的好的地方,其中就比如说synchronized锁原理以及synchronized锁升级、包括一些原理知识点都有涉及,对于我这类基础知识薄弱的很有收获。

本段时间学习知识点笔记见(个人)JUC快速入门各个知识点汇总


学习资源

视频

书籍

  • 《实战Java高并发程序设计》P93

多线程学习博客专栏万千世界中一滴小水滴—多线程专栏

说明:之后若是对juc进行深入学习的话会持续进行更新!!!



SpringCloud

01、springcloud课程列表开发

springcloud案例项目,详细内容见笔记:

image-20211005133159873

dubbo-learn

springboot-dubbo:dubbo+zookeeper,对应博客:


第三方服务调用

AliyunOssService

目前已封装上传、删除接口。

image-20220326183758276



整理者:长路 时间:2021.5.16 最近更新时间:2021.10.5 13:32

空文件

简介

手写案例:静态服务器、servlet、Mybatis代理类依赖注入容器 案例demo: springsecurity:①动态绑定权限。②整合oauth2 rabbitmq:①生产者消费者、交换机、springboot集成demo springcloud:①某个模块拆分为微服务,整合springcloud 展开 收起
Java 等 3 种语言
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/changluJava/demo-exer.git
git@gitee.com:changluJava/demo-exer.git
changluJava
demo-exer
JAVA-手写及整合demo案例
master

搜索帮助