- 博客(42)
- 收藏
- 关注
原创 【源码分析】Spring MVC类型转换器匹配
之前一直以为类型转换器是通过遍历的方式挨个匹配,直到匹配到合适的类型。但是一想到有这么多类型,如果挨个匹配不仅效率慢,而且还容易出错,翻翻源码,看到了类型转换的转换规则如下。这里便是最终转换的地方,这个方法很庞大,我这里只保留我代码经过的地方。os: 构建springmvc源码失败,,真难受。到这里才算真正找到了处理类型转换的地方。
2023-06-09 17:04:41 261
原创 【源码分析】Spring中getBean方法简单解析
所以当我们获取bean时,会根据Scope属性,分为几种情况。下面来观察一下源码。首先还是和上面一样看能比能在单例池中获取到这个对象,获取不到直接进入后面的方法。这个方法便是获取的bean是属于哪种scope,进而继续判断,下面分段解析。如果在单例池获取到了当前获取的bean,就直接返回了。在容器加载完的时候,单例的bean都已经被解析为。这里又调用了doGetBean方法,没什么好说的。先看看要创建的bean,是否依赖了别的bean。并且,单例bean被初始化并且存储在。
2023-06-01 15:21:40 387
原创 【源码分析】Spring如何解析xml文件生成BeanDefinition
Spring将Xml文件转换为Document对象,再对Document对象中的元素进行遍历、解析、分类、存储等。
2023-05-31 20:27:12 572
原创 我的创作纪念日
这一年来学到的技术越来越多,代码量也在增长,一行行代码在指尖流出,让自己不禁生出一种自豪感。那是我的起点,也会见证我成长的过程。当然出现了自己也不知道的问题,还是尽可能的去搜索引擎搜索。这段时间在新的项目中忙碌,也好久没更新过了,但是一直在不断的更新着自己本地的笔记。还是很喜欢写博客的,总结自己学习或者工作上的问题。我感觉最有趣的时候就是找Bug的时候,在满篇都认识的代码中,找到哪里出了问题。如果此时并未找到问题,也可以确定代码没有问题,这时候就可以去怀疑是否依赖的包是否有冲突、运行环境是否有问题等。
2023-04-21 11:57:45 129
原创 SpringMVC基础源码分析(一)
如果我们在容器里添加了HandlerAdapter,那么就不会通过读取本地的文件添加默认的四个HandlerAdapter。如果没在容器中添加HandlerAdapter,机会读取本地的。
2023-03-02 20:58:23 392 2
原创 【Spring基础补充】 注解补充(二)
这个接口可以处理表达式,估计前面用的这个原理差不多】的方法的。这个注解在springboot中的使用还是很多的。没有被触发,猜测为反射注入,直接进行在无参构造进行debug。:表明当前bean是原型的,每次获取到的对象都不是同一个。:表明当前bean是单例的,每次获取到的对象都是同一个。一旦添加当前注解就默认延迟加载。只有在用的时候会初始化。打断点,继续进行debug。这些东西不看源码也可以的,但是就是想练练手。里面就一个返回值为Boolean的方法。1332行的处理表达式的方法。注解一起使用的时候,
2023-03-01 11:36:45 99
原创 【Spring基础补充】 注解补充(一)
自定义扫描需要实现TypeFilter接口// 获取Bean的名字 String className = metadataReader . getClassMetadata() . getClassName();// 包含Dao的允许加载 if(className . toUpperCase() . contains("DAO")) {//允许加载 } return false;// 不允许加载 } }type选择为。
2023-02-25 17:33:57 173
原创 Spring注解补充(一)
注解补充挑一些常用,但是深入不多的总结一下。Bean的生命周期在@Bean注解中,添加init属性和destroy属性@Bean(initMethod = "initMethod", destroyMethod = "destroyMethod")public User user() { return new User();}使用@PostContructor和@Pre...
2023-02-25 17:25:00 34
原创 利用反射和代理简单模拟mybatis实现简单的CRUD
今天突发奇想,好像一些基本的CRUD操作路数都是一样的,又想到mybatis中的操作,便想着简单的模拟一下。随便写写,就当练习反射了。之前一直在犹豫,是否可以对接口创建代理类,后来查阅了一些资料,发现mybatis好像就是对接口的一些代理的处理。这里使用泛型,是为了更好的对数据进行处理。把这些先声明出来,方便后续的管理和使用。既然是反射,那就得把数据写活,如果直接用。类的字段和属性,那不是写死了?
2023-02-13 20:33:11 153 2
原创 MySQL视图、存储过程、函数、触发器、定时任务、流程控制总结
3.搭配存储过程或者函数使用,结尾必须为end case,中间的比较语句也必须加分号,then 后面必须跟着语句使用。 2.搭配select语句,里面每个语句结束后不能添加分号,结尾语句必须为end,不能为end case; 1.case语句不能直接使用,需要搭配存储过程或者函数使用,或者搭配select语句使用。因为这样会循环的触发触发器,所以不能直接这样进行数据的插入。的时候,new表格中是修改后的数据,old表格中是被修改行的数据。,不会直接进行增删改,会执行触发器里面的代码。
2023-02-10 14:48:22 297
原创 MySQL基础练习题
MySQL基础查询练习前提准备使用ddl语句创建数据库student表格:create table student( id int PRIMARY KEY COMMENT 'id主键', `name` varchar(20) COMMENT '名称', gender TINYINT(2) COMMENT '性别 1男 2女 3保密', age TINYINT UNSIGNED C...
2023-02-09 16:53:00 25
原创 MySQL索引的基本理解
之前一致以为索引就是简单的在原表的数据上加了一些编号,让查询更加快捷。后来发现里面还有更深的知识。索引用于快速查找具有特定列值的行。如果没有索引,MySQL 必须从第一行开始,然后通读整个表以找到相关行。表数据越多,成本就越高。如果表有相关列的索引,MySQL 可以快速确定要在数据文件中间查找的位置,而无需查看所有数据。这比顺序读取每一行要快得多。自从MySQL5.5版本之后,MySQL...
2023-02-08 21:50:00 15
原创 group by 、concat_ws()、 group_caoncat()的使用
之前觉得这里简单不需要再进行总结了。后来发现还是需要总结巩固一下,还是有一些方法之类的之前未使用过。如果我们按照classname分组,那么分组后当前组的数据,就是group_concat()的主要拼接对象。根据group by的特性,这也是为什么通过group by进行分组后,我们对数据操作需要借助一些函数。在group by中使用过该函数,它可以把通过group by分组后后面的数据拼接起来。分组后数据变成了一行中包含多条数据,没办法在mysql中通过表格表现出来。将表中的数据根据某个条件进行分组。
2023-02-08 14:38:09 768
原创 MySQL插入数据的多种方式
这里如果提示不允许也需要修改配置文件【注意:不太建议开启 ,记得及时关闭,有安全风险!使用命令行方式导入数据,这种方式比较简单,百度搜一下即可。这种方式首先得准备好要插入的数据文档,然后进行插入。
2023-02-06 19:58:43 10104
原创 MySQL执行流程
整理的笔记忘了保存了,同志们typora一定要记得开自动保存啊! 只能从老师笔记上粘贴一些了。update语句的整体执行流程和select语句是一样的。只是少了缓存的那一步骤。mysql想完成数据的修改,会先从存储引擎层读取数据,把数据读取到服务层进行数据的修改,再通过存储引擎层把数据更新到数据库中。mysql每次读取数据都会读取16384B的数据,默认是16KB的数据。一页的数据。在innodb引擎中设计了 buffer pool 缓冲区。Mysql从磁盘中通过IO读取数据到buffer pool中,引擎
2023-02-06 14:33:50 312
原创 MySQL错误锦集【持续更新】
[42000][1075] Incorrect table definition; there can be only one auto column and it must be defined as a key出现情景:在当前表格,有添加了主键的auto_increment但是当删除主键约束的时候提示错误:[42000][1075] Incorrect table definition...
2023-02-06 14:15:00 27
原创 MySQL修改表的各种操作
如果添加某列没加默认值的话,默认值为null,即使后面修改为有默认值,修改过后原添加的数据不会发生更改,再添加数据时默认值才会生效。这里不可以不把默认值加上,会把字段的默认值丢掉。名字修改后,原表的名字就失效了。
2023-02-03 20:30:12 469
原创 MySQL数据类型补充
M的取值范围是(0, 255)**。int(M)这个M在字段的属性中指定了unsigned(无符号)和zerofill(零填充)的情况下才有意义。**表示当整数值不够M位时,用0填充。如果整数值超过M位但是没有超过当前数据类型的范围时,就按照实际位数存储。当M宽度超过当前数据类型可存储数值范围的最大宽度时,也是以实际存储范围为准。 MySQL8之前,int没有指定(M),默认显示(11)。 对于整数类型,MySQL还支持在类型名称后面加小括号(M),而小括号中的M表示显示。
2023-02-03 20:28:36 113
原创 修改表的各种操作
修改表的各种操作官网:https://dev.mysql.com/doc/refman/8.0/en/alter-table.html这里挑几个常用的演示一下:原表格sql语句:create table if not exists test1( id int auto_increment primary key comment '主键id', `name` va...
2023-02-03 20:26:00 29
原创 【基础补充】类的初始化
调用某个类的静态成员(类变量和类方法 ----> 被static修饰的变量或者方法),如果此时类没有初始化则先做类的初始化再进行实例的初始化。通过子类调用父类的静态变量,静态方法,只会倒置父类的初始化,不会导致子类的初始化。第一次使用某个类的时候会进行初始化,第二次再进行new的时候就不会进行初始化。通过反射操作某个类时,如果这个类没有初始化,也会倒置该类先初始化。运行主方法所在的类,需要先完成类的初始化,再执行main方法。子类初始化的时候,发现父类没初始化的时候先初始化父类。
2023-02-01 21:13:47 68
原创 【基础补充】类加载器以及双亲委派机制
拓展类加载器(Extension ClassLoader JDK9之前)应用程序类加载器(Application ClassLoader)不是继承关系,是组合的方式实现的。
2023-02-01 20:58:58 70
原创 MySQL80简单安装
下载地址:https://dev.mysql.com/downloads/mysql/这里用的什么名字 后面服务里面就是什么名字 默认为MySQL。,一定要记下来初始密码,后来登录要用到。(我用的名字是MySQL80)配置MySQL80的环境变量。
2023-02-01 11:32:27 549 2
原创 MySQL8.0安装
MySql8.0安装下载MySql8.0解压版下载地址:https://dev.mysql.com/downloads/mysql/解压mysql配置MySQL80的环境变量在解压的根目录下添加my.ini文件[mysqld]#设置时区为东八区,此项设置后,在连接MySQL的时候可以不用每次都手动设置时区default-time-zone = '+8:00'# 设置33...
2023-02-01 11:24:00 17
原创 类加载器和双亲委派机制
类加载器类加载器可以分为三种:引导类加载器(根加载器 Bootstrap ClassLoader):负责加载jre/rt.jar核心类库 它本身不是java代码实现的,也不是ClassLoader的子类,获取该对象往往返回null拓展类加载器(Extension ClassLoader JDK9之前)它负责加载jre/lib/ext拓展库 它是根加载器的子类 Java...
2023-02-01 09:08:00 17
原创 类的初始化
1.导致类初始化的原因:运行主方法所在的类,需要先完成类的初始化,再执行main方法。public class Main { static { System.out.println("Main.static initializer"); } public static void main(String[] args) { ...
2023-01-31 20:59:00 27
原创 类加载过程
类加载过程当程序主动使用某个类时,如果该类还未被加载到内存中,系统会通过加载、连接、初始化三个步骤来对该类进行初始化,如果没有意外,JVM将会连续完成这三个步骤,所以有时也把这三个步骤统称为类加载。(1)加载 指的是将类型的class字节码数据读入内存。(2)连接 ① 验证:校验合法性等 ② 准备: 准备对应的内存(方法区)、创建Class对象,为类变量(类中的stat...
2023-01-31 20:58:00 15
原创 博客园主题美化
一般情况下,我是不太喜欢花里胡哨的界面的,但是博客园自带的主题实在是难看。。。我是用的是SimpleMemory主题,个人感觉部署起来很简单,而且界面也比较好看。一些代码的高亮之类的也很方便。部署教程直接放原作者写的文档了,简洁明了,一步到位。https://bndong.github.io/Cnblogs-Theme-SimpleMemory/v2/#/...
2023-01-31 14:30:00 31
原创 情韵杂七杂八的学习笔记
北方情韵学习笔记idea快捷配置类的创建时信息效果图:添加步骤:创建File Header 和File Topctrl + alt + s 打开设置 搜索 File and code Template分别创建两个文件:File Header:/** * * <p>Project: ${PROJECT_NAME} - ${NAME} * <p>...
2023-01-31 14:13:00 97
原创 【杂七杂八的小玩具】利用多线程实现文件的分片下载
为什么这里要创建子线程呢?因为每个子线程要下载的任务的字节数据不一样,所以需要我们去指定不同的参数。在主线程获取要下载文件的字节大小,然后平分给每个子线程,让他们去分片下载。在子线程里通过RandomAccessFile进行字节的设置。下载大文件速度还是很快的,就是多线程测速还真是有一些麻烦。通过URL实例对象获取HttpUrlConnection。为了方便线程的管理和创建,所以采用了线程池的方法。这样在子线程调用的时候,就可以通过线程池进行调用。这样就完成了分片的数据下载。
2023-01-15 10:15:42 452
原创 【细察分毫】Maven切换编译语言版本
优先级从大到小排序:settings.xml里profile配置 > pom.xml配置 > maven默认配置。
2023-01-11 10:03:17 609 3
原创 【简单面试题】二分查找算法
有一个有序表为1,5,8,11,19,22,31,35,40,45,48,49,50。index+1`,因为此时index所对应的值是小于所求值num,所以可以直接排除index.,因为此时index所对应的值是大于所求值num,所以可以直接排除index.在拥有512个元素的数组中二分查找一个数,需要比较的次数最多不超过多少次。 如果是小鼠,则舍弃小数部分,整数再加1,为最终结果。在一组排好序的数组中,找到所求值的索引。2^n = 512 ,求解n的值即可。,以及左右边界的中间值。
2023-01-09 21:48:55 302
原创 【杂七杂八的小玩具】简单图床自适应轮播图
收集了一些网络照片,为了更好的管理和存储以及展示,所以打算做成网页,想看的时候点开就能直接看,感觉方便一些。核心: 将文件夹下的图片信息组合成json文件存储起来,然后通过异步请求获取到。// 可以自己修改这里 json数据里是一个包含图片地址的数组。(该图片来源于网略,若有侵权联系删除,抱歉抱歉~)直接在需要展示的文件夹下面使用cmd执行就行。里面,可以自己修改下面的json数据地址。可以直接拿去做单页,但是没有数据。下面是自己遇到的问题以及写的一些。//让图片按照原来的比例展示。
2023-01-07 15:19:29 76
Java 利用多线程实现文件的分片下载
2023-01-15
欧拉系统 提示了好多version GLIBC_版本号 not found
2023-11-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人