自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 收藏
  • 关注

原创 MySQL系统变量

1. 设置不同作用范围的系统变量set [global|session] 系统变量名 = 值;set global default_storage_engine = MyISAM;set session default_storage_engine = MyISAM;如果在设置系统变量的时候省略了作用范围,默认的作用范围就是session2. 查看不同作用范围的系统变量show [global|session] variables [like 匹配的模式]show global v

2020-12-06 17:32:28 190

原创 MySQL配置文件

1. 查看mysql的版本mysql -Vmysql --version2. 配置文件的配置分组[server]组下面的启动选项将作用于所有的服务器程序[client]组下面的启动选项将作用于所有的客户端程序[mysqld]类别:启动服务器能读取的组:[mysqld] [server][mysqld_safe]类别:启动服务器能读取的组: [mysqld] [server] [mysqld_safe][mysql.server]类别:启动服务器

2020-12-06 17:31:17 205

原创 DriverManager类如何利用线程上下文类加载器加载java.sql.Driver实现类

1. 测试环境搭建:1. 在pom文件中导入mysql-connector-java依赖<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope></dependency>2. 搭建测试类2. DriverManager初始化流程分析2.1

2020-11-23 23:39:00 467

原创 如何利用AtomicReference写一个简单的自旋锁?

1. 自旋锁成品代码如下:package lock.spinlock;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicReference;/** * @author wuyiccc * @date 2020/7/19 10:37 * 岂曰无衣,与子同袍~ */public class SpinLock { private AtomicReference<Thre

2020-07-19 11:05:14 283 1

原创 sychronized的两种用法

1. 对象锁包括方法锁(默认锁为this当前实例对象)和同步代码锁(自己指定锁对象)2. 类锁指synchronized 修饰静态的方法或指定锁为class对象synchronized 对于代码块发生的无法处理的异常后,会自动释放锁...

2020-07-17 08:05:18 223

原创 win10环境下使用IDEA编译Spring5源码---笔记---已经成功编译多次

0. 编译需要提前准备的环境win10 操作系统IntelliJ IDEA 2019.3 ultimate edition 版本, 社区版也可安装并按照正常流程配置好git,确保IDEA能够使用配置好jdk8开发环境,需要配置JAVA_HOME 环境变量, 确保IDEA能够使用1. 下载Spring5源码并解压理论上来说,应该需要从github上面下载Spring源码,但是由于网速问题,我们改到gitee上面下载我已经提前复制了一份spring源码到gitee上面了, 链接如下:h

2020-07-16 18:52:04 400

原创 25.类加载器实战剖析与疑难点解析

1. 获取各个类加载器的加载文件的路径package com.wuyiccc.jvm.classloader;/** * @author wuyiccc * @date 2020/3/11 21:39 * 岂曰无衣,与子同袍~ */public class MyTest18 { public static void main(String[] args) { System.out.println(System.getProperty("sun.boot.class

2020-07-16 10:08:42 196

原创 24.类加载器命名空间实战剖析与透彻理解

1. new一个对象的类加载器new MyCat() 会从当前Sample类的类加载器开始向上搜索,然后向下尝试加载package com.wuyiccc.jvm.classloader;/** * @author wuyiccc * @date 2020/3/11 19:06 * 岂曰无衣,与子同袍~ */public class MyTest17_1 { public static void main(String[] args) throws ClassNotFou

2020-07-16 10:01:55 227

原创 23.jvisualvm 的使用

双击进入

2020-07-16 10:00:41 141

原创 22.类的卸载

当MySample类被加载,连接和初始化后,它的生命周期就开始了。当代表MySample类的Class对象不再被引用,即不可触及时,Class对象就会结束生命周期,MySample类在方法区内的数据也会被卸载,从而结束MySample类的生命周期一个类何时结束生命周期,取决于代表它的Class对象何时结束生命周期由Java虚拟机自带的类加载器所加载的类,在虚拟机的生命周期中,始终不会被卸载。前面已经介绍过,Java虚拟机自带的类加载器包括根类加载器,扩展类加载器和系统类加载器。Java虚拟机本身会始终.

2020-07-16 09:59:09 217

原创 21.类加载器双亲委托机制实例剖析---命名空间

每个类加载器都有自己的命名空间,命名空间由该加载器及所有父加载器所加载的类组成在同一个命名空间中,不会出现类的完整名字(包括类的包名)相同的两个类在不同的命名空间中,有可能会出现类的完整名字(包括类的包名)相同的两个类所以我们可以得到如下结论子加载器所加载的类能够访问到父加载器所加载的类父加载器所加载的类无法访问到子加载器所加载的类...

2020-07-16 09:58:08 158

原创 20.类加载器双亲委托机制实例剖析

没有指定类加载的具体绝对路径时,如果只是包名路径,那么默认会从当前项目进行加载1. 为什么loadClass 的参数是二进制包名,而不能是 / 的 路径名呢 ?在defineClass 这个方法中规定传入的name必须是二进制包名,否则在内部的执行逻辑的checkName() 的name.indexOf("/")的方法检查中就会抛出异常但是如果传入的是二进制包名,那么在我们自定义的findClass()方法中,在具体的加载类的.class 文件的时候,就必须手动将包名转换为绝对路径.

2020-07-16 09:57:22 108

原创 19.类加载器重要方法详解

1. defineClass

2020-07-16 09:54:56 121

原创 18.自定义类加载器

package com.wuyiccc.jvm.classloader;import java.io.*;/** * @author wuyiccc * @date 2020/3/10 21:32 * 岂曰无衣,与子同袍~ */public class MyTest16 extends ClassLoader { private String classLoaderName; private final String fileExtension = ".class.

2020-07-16 09:52:37 90

原创 17.ClassLoader源码分析与实例剖析

1. 查看classloader 文档

2020-07-16 09:50:08 126

原创 16.不同类加载器作用与加载动作分析---(获取ClassLoader的途径)

1. 打印类加载器2. 通过应用类加载器来获取指定当前项目的文件的全路径因为应用类加载器可以加载当前应用的类,所以我们可以通过它的getResource方法来获取这个类的全路径package com.wuyiccc.jvm.classloader;import java.io.IOException;import java.net.URL;import java.util.Enumeration;/** * @author wuyiccc * @date 2020/3/10

2020-07-16 09:48:47 146

原创 15. 反射与类加载器获取类分析

调用ClassLoader类的loadClass 方法并不是对类的主动使用,不会导致类的初始化

2020-07-16 09:47:13 121

原创 14.类加载器双亲委托机制详解

1. 类加载器的父亲委托机制(双亲委托机制)在父亲委托机制中,各个加载器按照父子关系形成了树形结构,除了根类加载器之外(根类加载器没有父加载器),其余的类加载器都有且只有一个父加载器当一个加载器加载一个类时,会递归的交给父加载器进行加载。直到递归到最顶层,然后自顶向下进行判断,如果一旦有一个加载器能够成功加载,那么加载成功结束它是自底向上检查类是否以及加载,然后自顶向下尝试加载该类2. 各个类加载器的加载的类1. BootStrap ClassLoader (启动类加载器)Load J

2020-07-16 09:41:13 135

原创 13. 初始化对于类与接口的异同点深入解析

ps: 常量池的规则对于接口与类同样适用1. 一个类实现一个接口: 主动使用该类代码如下,当一个类实现一个接口时,我们主动调用该类的非编译期才能确定的常量,那么肯定会初始化该类,但是我们需要注意的是这个类实现的接口只会被加载,并不会被初始化,而如果该类是继承一个类,那么这个父类与接口不同,父类也会被初始化public class MyTest5 { public static void main(String[] args) { System.out.println(M.

2020-07-16 09:39:50 133

原创 12.类加载器深入解析及重要特性分析---04-类的初始化

在初始化阶段,Java虚拟机执行类的初始化语句,为类的静态变量赋予初始值,在程序中,静态变量的初始化有两种途径在静态变量的声明处进行初始化在静态代码块中进行初始化,例如在以下代码中,静态变量a和b都被显式初始化,而静态变量c没有被显式初始化,它将保持默认值public class Sample { private static int a = 0; public static long b; public static long c; static { .

2020-07-16 09:37:55 89

原创 11.类加载器深入解析及重要特性分析---03-类的连接

类被加载后,就进入连接阶段。连接就是将已经读入到内存的类的二进制数据合并到虚拟机的运行时环境中去1. 类的验证的内容类文件的结构检查语义检查字节码验证二进制兼容性的验证等等…2. 类的准备在准备阶段,Java虚拟机为类的静态变量分配内存,并设置默认的初始值。例如对于以下Sample类,在准备阶段,将为int类型的静态变量a分配4个字节的内存空间,并且赋予默认值为0,为long类型的静态变量b分配8个字节的内存空间,并且赋予默认值0public class Sample { .

2020-07-16 09:36:55 85

原创 09.类加载器深入解析及重要特性分析---02-类的加载

1. 类的加载类的加载的最终产品是位于内存中的class对象Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口2. 两种类加载器1.Java虚拟机自带的类加载器根类加载器 (Bootstrap) — 也叫启动类加载器扩展类加载器 (Extension)系统 (应用) 类加载器 (System) — 这里系统与应用是同一个概念 AppClassLoader2. 用户自定义的类加载器必须是java.lang.ClassLoader

2020-07-16 09:34:56 141

原创 08.类加载器深入解析及重要特性分析---01---五大阶段

1. 加载加载:就是把二进制形式的.class文件读入java虚拟机中2. 连接1. 验证类文件的结构检查语义检查 (abstract 不能与 final 共存)字节码验证 (.class 文件内部数据是否正确)二进制兼容性的验证 (新版本jvm 与 旧版本的jvm 的兼容性)2. 准备为类变量分配内存,设置默认值。但是在到达初始化之前,类变量都没有初始化为真正的初始值3. 解析解析过程就是在类型的常量池中寻找类,接口,字段和方法的符号引用,把这些符号引用替换成

2020-07-16 09:34:03 88

原创 07. 类的初始化顺序---准备阶段的意义

因为有了准备阶段的赋默认值,才能在没有被初始化的情况下进行运算

2020-07-16 09:28:47 88

原创 05-03.数组创建本质分析

不会导致类的初始化1. 引用的一维数组类型2. 引用的二维数组类型3. 总结对于数组类型来说,其类型是由JVM 在运行期间动态生成的,表示为[Lcom.wuyiccc.jvm.classloader.MyParent4,这种形式,动态生成的类型,其父类型就是Object对于数组来说,JavaDoc 经常将构成数组的元素为Component,实际上就是将数组降低一个维度后的类型4. 普通数组类型5. 补充助记符:anewarray : 表示创建一个引用类型的(如.

2020-07-16 09:27:38 93

原创 05-02. 运行期常量的确定时间及特性

1. 运行期常量的初始化情况当一个常量并非编译器可以确定的,那么其值就不会被放到调用类的常量池中,这时,在程序运行时,会导致主动使用这个常量所在的类,显然会导致这个类被初始化...

2020-07-16 09:22:03 97

原创 05-01.补充:助记符

助记符:ldc 表示将int,float或是String类型的常量值从常量池中推送至栈顶(代表马上要用)bipush 表示将单字节(-128~127) 的常量值推送至栈顶sipush 表示将一个短整型常量值(-32768~32767)推送至栈顶iconst_1 表示将int型的1 推送至栈顶iconst_2 表示将int型的2 推送至栈顶iconst_5 表示将int型的5 推送至栈顶int 值>=6 时,就是bipush包位置pac.

2020-07-16 09:18:05 389

原创 05-00.常量的本质含义---编译期能被确定的常量

1.案例–1可以看出加final之后的结果不一样final表示是一个常量,在编译阶段,这个常量就会被存入到调用这个常量的方法所在的类的常量池中所以加了final之后,我们可以看出是MyTest2 的main方法调用了这个常量,所以str这个常量就存入到MyTest2的常量池中本质上,调用类并没有直接引用到定义的常量,因此并不会触发定义常量的类的初始化。所以,MyParent2也就不会被初始化了注意: 这里指的是将常量存放到了MyTest2的常量池中,之后MyTest2与MyP

2020-07-16 09:12:30 203

原创 04-01.补充:追踪类的加载器信息

0.jvm参数的格式-XX:+ :表示开启option选项-XX:- :表示关闭option选项-XX:= :表示将option选项的值设置为value对于jvm,有一部分选项默认是开启的,有一部分是关闭的,所以有些选项就需要手动开启或者关闭1.查看类加载器的信息使用jvm参数 -XX:+TraceClassLoading...

2020-07-16 09:09:34 137

原创 04-00.类的加载

1.简介类的加载指的是将类的.class 文件中的二进制数据读入到内存中,然后在内存中创建一个java.lang.Class对象(规范并未说明Class对象位于哪里,HotSpot虚拟机将其放在了方法区中)用来封装类在方法区内的数据结构2.加载.class文件的方式从本地系统中直接加载通过网络下载.class文件从zip,jar等归档文件中加载.class文件从专有数据库中提取.class文件将Java源文件动态编译为.class文件3.案例分析 – 1对于上述的用子类访问

2020-07-16 09:08:33 115

原创 03.java对类的使用方式

1.java程序对类的使用方式可以分为两种主动使用被动使用2.所有的java虚拟机实现必须在每个类或接口被java程序"首次主动使用"时才初始化它们即首次主动使用初始化3.主动使用的七种方式创建类的实例访问某个类或接口的静态变量,或者对该静态变量赋值调用类的静态方法反射(如Class.forName(“com.test.Test”)对类的主动使用)初始化一个类的子类(初始化子类,也是对父类的主动使用)java虚拟机启动时被标明为启动类的类(main方法)jdk1.7开

2020-07-16 09:00:41 157

原创 02.类五大阶段:加载,连接与初始化,使用,卸载

1.加载查找并加载类的二进制数据(class文件)2.连接验证:确保被加载类的正确性准备:为类的静态变量分配内存,并将其初始化为默认值,执行static代码块解析:把类中符号引用转化为直接引用3.初始化为类的静态变量赋予正确的初始值(不是默认值)4.使用使用类或者创建对象5.卸载将类从内存中销毁,从此不能再使用该类并且创建对象ps: 对于类,先顺序执行赋默认值和static代码块,最后执行初始值赋予,对于对象成员,先执行赋默认值和初始化,然后执行代码块,最后执行构造

2020-07-16 08:59:41 160

原创 01.类加载器简介

1.在java代码中,类型的加载(class,interface,enum等,而不是具体的对象),连接与初始化过程都是在程序运行期间完成的1.类的加载一般都是从硬盘加载到内存中2.连接就是将类与类之间的关系处理好3.初始化一般都是对一些静态变量的赋值2.提供了更大的灵活性,增加了更多的可能性3.java虚拟机本身就是一个进程在如下几种情况下,java虚拟机将结束生命周期:1.执行了system.exit()方法2.程序正常执行结束3.程序在执行过程中遇到了异常或错误而异常终止(没有进行异

2020-07-16 08:58:51 88

原创 从零写一个具有IOC-AOP-MVC功能的框架---学习笔记---12.Hello Framewok框架初步使用介绍(测试)+未来计划展望

1. 框架功能的使用1.1 编写controller类1.1.1 需要完成的controller代码如下:package test.demo.controller;import com.wuyiccc.helloframework.core.annotation.Controller;import com.wuyiccc.helloframework.injection.annotation.Autowired;import com.wuyiccc.helloframework.mvc.an

2020-07-15 23:41:52 444 1

原创 从零写一个具有IOC-AOP-MVC功能的框架---学习笔记---11. MVC功能之http请求处理器的编写---简易框架最后一公里!

1. 本章需要完成的内容:完成ControllerRequestProcessor类的编写: Controller请求处理器完成JspRequestProcessor类的编写:jsp资源请求处理完成PreRequestProcessor类的编写: 请求预处理,包括编码以及路径处理完成StaticResourceRequestProcessor类的编写: 静态资源请求处理,包括但不限于图片,css,以及js文件等, 转发到DefaultServlet2. PreRequestProcess

2020-07-15 21:49:05 726 1

原创 从零写一个具有IOC-AOP-MVC功能的框架---学习笔记---10. MVC 结果渲染器的编写

1. 本章需要完成的内容完成请求处理器接口RequestProcessor的编写完成ResultRender渲染器接口的编写完成DefultResultRender默认渲染器类的编写完成InternalErrorResultRender内部异常渲染器类的编写完成JsonResultRender Json渲染器类的编写完成ResourceNotFoundResultRender 资源未找到时使用的渲染器类编写完成ViewResultRender 页面渲染器类的编写完成DispatcherS

2020-07-15 18:53:16 1788

原创 从零写一个具有IOC-AOP-MVC功能的框架---学习笔记---09. MVC访问流程简介及部分类的编写

1. MVC 实现思路简介2. 整体框架搭建2.1 MVC前置依赖配置2.2 编写MVC相关信息存储类2.2.1 编写ControllerMethod类该类主要存储Controller类和其具有的方法实例,方法参数的映射2.2.2 编写ModelAndView类该类主要存储处理完后的结果数据,以及显示该数据的视图路径2.2.3 编写RequestMethod枚举类该类主要存储我们方法所限制的请求方法的类型2.2.4 编写RequestPathInfo类

2020-07-15 10:08:17 215

原创 从零写一个具有IOC-AOP-MVC功能的框架---学习笔记---08.框架的AOP功能和IOC功能测试

1. 本章内容在这一章我们会对框架的IOC以及AOP的功能进行测试2. 编写相关的测试类2.1 编写我们需要被增强的类:AspectTarget2.1.1 需要完成的代码如下package com.wuyiccc.demo.aop;import com.wuyiccc.helloframework.core.annotation.Component;import lombok.extern.slf4j.Slf4j;/** * @author wuyiccc * @date 2

2020-07-14 16:32:35 190

原创 从零写一个具有IOC-AOP-MVC功能的框架---学习笔记---07. AOP功能实现以及讲解

1. 本章需要完成的内容完成AspectListExecutor类的编写完成AspectWeaver类的编写完成PointcutLocator类的编写完成ProxyCreator类的编写2. 完成PointcutLocator类的编写2.1 需要完成的代码如下:package com.wuyiccc.helloframework.aop;import org.aspectj.weaver.tools.PointcutExpression;import org.aspectj.we

2020-07-14 15:03:48 350

原创 从零写一个具有IOC-AOP-MVC功能的框架---学习笔记---06. AOP前置工作准备以及实现逻辑分析

1. AOP实现思路简介我们在实现AOP时主要用到两个工具库:cglib和AspectJ, cglib是作为我们框架底层的真正动态代理的实现工具,然后我们还需要用AspectJ的切面语法来为指定类进行动态逻辑的增强最后完成时AOP的使用方式2. 实现AOP之前需要的准备工作: 完成相关依赖的导入3. 实现AOP整体架构搭建:完成相关类的创建3.1 创建@Order注解该注解的功能是标记Aspect切面类的优先级, 因为我们对同一个类,可能会有多个Aspect类对其进行增强,那么我

2020-07-14 09:34:05 228

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除