自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 详解Spring中 Environment

Environment为Spring体系中的环境上下文,给我们提供了profiles and properties功能。1 profilesprofiles用来区分不同环境的配置,每一个profiles相当于一个bean的集合1.1 示例例:@Component@Profile("dev")public class EnvBeanDev {}@Component@Profile("prd")public class EnvBeanPrd {}启动类:public class

2021-06-09 17:09:01 1730

原创 自定义类加载器---支持同时加载jar包和文件夹中得类

自定义类加载器如下:public class MyClassLoaderToJar extends ClassLoader{ URLClassPath ucp; public MyClassLoaderToJar(URL[] urls) { // 初始化一个资源工具,可加载jar包和文件夹中类 ucp = new URLClassPath(urls); } @Override public Class<?> loadCla

2021-04-27 16:40:29 445 1

原创 ClassLoader 的 findLoadedClass 方法

findLoadedClass官方文档说明:Returns the class with the given binary name if this loader has been recorded by the Java virtual machine as an initiating loader of a class with that binary name.在ClassLoader的loadClass方法中第一步是去加锁,第二部就会调用findLoadedClass方法判断该类是否已经加载过,

2021-04-27 15:19:19 1219

原创 dubbo 源码解析(二)服务导出

通过上一篇文章我们提到,服务的导出是通过DubboBootstrapApplicationListener监听器来完成。1 DubboBootstrapApplicationListener 初始化首先我看DubboBootstrapApplicationListener的构造方法public DubboBootstrapApplicationListener(ApplicationContext applicationContext) { super(applicationConte

2021-03-01 21:31:14 256 1

原创 dubbo 源码解析(一)

本文解析的Dubbo源码的版本为2.7.91 与spring整合源码1.1 注册Dubbo配置类上图为Dubbo与Spring整合注册配置类的主要流程,下面我们一步步来分析。Dubbo与Spring整合首先我们会在启动类上配置 @EnableDubbo注解,@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Inherited@Documented@EnableDubboConfig@DubboComponent

2021-02-21 17:06:55 212

原创 dubbo SPI源码详解

1 jdk spispi全名Service Provider Interface,是一种服务发现机制,即为接口寻找服务实现的机制。jdk spi 约定提供方只需制定接口规范,提供给外部实现,通过读取jar包META-INF/services/目录以接口名命令的文件来加载该接口的实现,文件里就是该接口的具体实现。下面是一个简单的例子:提供一个接口JdkSpiServicepublic interface JdkSpiService { public void hello();}提供

2021-02-08 17:30:09 224

原创 dubbo 应用示例

本文将创建3个工程:dubbo-provider 服务提供者工程dubbo-consumer 服务消费者工程dubbo-api 服务接口1 api 方式使用1.1 注册中心方式创建interface工程,提供者和消费者均需要依赖提供一个接口public interface HelloService { /** * 返回一句话 * @param name * @return: java.lang.String * @Author: jt-ape

2021-02-06 16:25:23 683 1

原创 Jave Agent(java代理 java探针 字节码插庄)

java探针、字节码插庄都是指的agent技术,agent技术可以构建一个独立于应用程序的代理程序(即为Agent),用来协助监测、运行甚至替换其他JVM上的程序(即替换字节码)。使用它可以实现虚拟机级别的AOP功能。实现java agent,有两种类型的:1.运行在主程序之前通过命令加载agent的jar包。2.运行在主程序之后通过VirtualMachine来加载agent。1 运行在主程序之前agent程序需要实现premain方法,premain方法有两种签名,虚拟机会首先尝试运行第一个方

2021-01-30 18:03:22 349

原创 JNI示例

JNI是Java Native Interface的缩写,中文bai为duJAVA本地调用,它bai允许Java代码和其他语言写du的代码进行交互,主要是C和C++。由于在实现的时候遇到很多坑,所以记录下实现不走,本文主要讲解在windows环境下实现,废话不多说,上代码。1 环境本文使用的环境:jdk1.8windows10,64位mingw_642 java代码public class JniDemo { public native void callCppMethod();

2021-01-30 13:18:35 703 4

原创 jvm 调优工具

1 示例代码1.1 示例代码1 元空间OOM设置启动参数:-XX:+PrintGCDetails -XX:MetaspaceSize=20m -XX:MaxMetaspaceSize=20mpublic class MetaspaceOverFlowTest { public static void main(String[] args) throws InterruptedException { while (true) { Thread.sl

2021-01-21 23:35:48 992 2

原创 jvm 调优命令

此博客是为了总结所有的调优命令,后续会不断更新。。。1 堆-Xmx 最大堆内存 ,-XX:MaxHeapSize命令简写。默认大小为物理内存1/4-Xms 初始堆内存,-XX:InitialHeapSize命令简写。默认大小为物理内存1/64一般初始堆内存和最大堆内存调成一样大,防止内存抖动,增加额外开销,-XX:MaxHeapSize-XX:MinHeapFreeRatio 参数用来设置堆空间最小空闲比例,默认值是 40。当堆空间的空闲内存小于这个数值时,JVM 便会扩展堆空间。-XX:Ma

2021-01-19 10:58:09 470

原创 jvm 对象大小和指针压缩

1 对象的内存布局下图是java对象的结构,数组对象才会有数组长度2 计算对象大小2.1 8字节对齐java 的对象默认都是8字节对齐的,即对象的大小都是8的整数倍,所以大小不够8的整数倍的会被补到8的整数倍,例:如果对象大小为30byte那么jvm会自动补2byte,补的2byte就叫对齐填充。2.1.1为什么要8字节对齐读取对象效率更高。假如一个对象大小为30byte,如果我们一个字节去读,需要读30次,才能将对象读取完成,假如是8字节对齐,我们只需要读4次,就能将对象读取完成。这其实是一

2021-01-10 15:38:24 731

原创 jvm 执行引擎

执行引擎是jvm执行java程序的一套子系统。1 解释器jvm中又两种解释器,字节码解释器、模板解释器,字节码解释器,解释执行,模板解释器执行编译后的硬编码(机器码)。1.1 字节码解释器java初期只有字节码解释器,字节码解释器是逐个将字节码指令翻译成硬编码然后执行,所以是java字节码 -> c++ -> 硬编码过程;非常低效。 0 new #2 <java/lang/StringBuilder> 3 dup 4 invokespecial #3 <java

2021-01-09 22:13:22 166

原创 字符串详解

1 常量池jvm中有三种常量池:进态常量池、运行时常量池,字符串常量池1.1 静态常量池(class常量池)在class文件中有一部分内容是常量池,用于存放编译期生成的各种字面量和符号引用。1.2 运行时常量池class常量池是静态信息,有些符号引用在运行时才能确定内存地址信息,这些常量被加载到内存后形成了运行时常量池,时InstanceKlass的一个属性,存在方法区。可通过HSDB查看可以看到编译器的类的符号引用转成了直接引用。1.3 字符串常量池java中会大量使用字符串,为了避

2021-01-09 18:05:59 171

原创 jvm 内存模型

jvm内存模型就是jvm启动的时候从操作系统中要了一块大的内存,然后将其分成了五个部分,方法区、堆、虚拟机栈、本地方法栈、程序计数器;其中堆和方法区是线程共有的,虚拟机栈、本地方法栈、程序计数器是线程私有的。1 方法区方法区是所有线程共享的,方法区是规范,1.8以前方法区的实现是永久代,1.8及以后方法区的实现是元空间;1.8以前永久代主要存储类的元信息、常量池、静态变量;1.8以后常量池和静态变量放到了堆里,用元空间替换了永久代,将类的元信息放到元空间,元空间使用本地内存,所以现在方法区可以使用更多

2021-01-09 14:33:31 141

原创 深入理解class文件

1.class文件1.1 class文件结构1.2 class文件结构说明class文件结构图中,u4、u2、u1表示该项占用子节数。比如常量池大小和接口数量各占两个子节,所以最多只能有65535个常量和最多能实现65535个接口。...

2021-01-07 12:46:40 420 1

原创 Oop-Klass 模型

OOP-KlASS模型是java 的类和对象在jvm中的存在形式。HotSopt JVM的设计者不想让每个对象中都含有一个vtable(虚函数表),所以拆分成Klass和Oop,虚函数表存在Klass中。1.Klass体系java中的每个类,在jvm中都有一个对应的Klass实例与之对应,存储了类的元信息如:常量池、方法信息、属性信息。继承体系如下:InstanceKlass:表示普通java类在JVM中的实例。InstanceMirrorKlass:表示java.lang.Class对象,在j

2020-12-20 15:27:35 778 3

原创 reactjs 动态路由 动态导入组件 require和react-loadable 传入变量

1.常规导入组件常规的导入组件需要在文件开始就将导入的组件写死,如下import xxx from 'xxx'现在我需要通过后端返回的数组动态的生成路由,因此在不知道后端返回的情况下,不知道需要导入哪些组件,就需要根据后端返回的组件路径,动态导入组件,方法一:require后端返回的数据如下:[{ path: '/login', component: 'Login'}]可以看见,组件为一个字符串路径。routes.js如下:/** * 根据数组生成路由数组,主要是根

2020-12-15 21:17:38 2108 1

原创 Spring Boot (七) 自动配置原理及自定义starter

hello

2020-09-20 00:46:51 370

原创 Spring Boot (六) 配置详解及源码分析

springboot 提倡零xml配置,所以我们用springboot开发一般不不会使用xml,它会默认的加载application.properties和application.yaml文件作为springboot的配置。

2020-09-18 11:49:36 356

原创 Spring Boot (五) jsp支持

前面我们说过springboot的部署方式,可以通过jar和war包两种,其中打成jar包通过java -jar方式启动是不支持jsp的,所以若要在springboot中使用jsp,需要打成war包部署到web容器中。1 jsp支持

2020-09-15 22:54:43 115

原创 Spring Boot (四) 热部署

1 springboot 热部署在开发当中我们修改代码比较频繁,而每次都修改过后都要手动重新启动,既麻烦又浪费了时间,下面是使用devtools热部署步骤。

2020-09-15 17:41:56 121

原创 Spring Boot (三) 单元测试

本章学习下springboot 单元测试的简单使用。1 简单demo环境:jdk1.8idea2020.1springboot 2.3.3junit5项目结构如下:pom.xml配置<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

2020-09-15 15:28:13 508

原创 Spring Boot (二) web项目的部署方式及启动原理

上篇文章中我们讲了springboot的三种创建方式,本章我们来讲讲springboot web项目两种部署方式,第一种是jar包部署;第二种是war包部署,本文将分别介绍两种方式的原理。1 jar包部署1.1 创建demo首先创建springboot项目,在pom.xml中引入WEB依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spri

2020-09-13 00:49:25 1165

原创 Spring Boot (一) 项目创建方式

@[TOC](springboot (一) 项目创建)说明突然想开始写写博客,将自己学习的东西记录一下,也算做一个整理,加深自己的理解和记忆;也希望能够帮助到大家,如果文章中有什么错误的地方希望大家多包涵,且可以在下方留言,我一定及时改正,大家共同学习,共同进步;目前正在学习springboot的技术,就从springboot的项目创建开始吧,开搞!!!springboot 项目创建的三种方式1.通过官网的快速创建进入官网找到springboot点击下方的Spring Initializr.

2020-09-12 13:21:02 114

原创 Nginx安装

Nginx安装1. nginx安装环境2.编译安装1. nginx安装环境nginx是C语言开发,建议在linux上运行,本教程使用Centos7.6作为安装环境。1.gcc安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:yum install gcc-c++2.PCREPCRE(PerlCompatible Regular Ex...

2020-03-22 20:10:15 50

原创 linux系统安装mysql数据库

linux安装mysql数据库功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入一.下载mysql压缩包功能...

2020-03-19 12:54:51 101

转载 javawen学习自定义标签开发

来源:https://blog.csdn.net/tom0915/article/details/79037028 一、简单标签(SimpleTag)  由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单、便于编写和调用的Simpl...

2019-01-22 10:19:27 126

原创 学习笔记二-------面向切面编程

参考:http://www.cnblogs.com/xrq730/p/4919025.html1.面向切面编程简介(AOP)目的:利用“横切”技术,将那些影响了多个类的公共行为封装到一个可重用的模块。减少系统的重复代码,降低模块之间的耦合度,有利于未来的可操作性和可维护性。将公共行为模块命名为切面(Aspect),指与业务无关,但是被业务模块共同调用的逻辑。AOP把软件系统分为两个部分:核...

2019-01-21 11:39:53 99

原创 第一篇文章:初学java自定义标签,Tag接口的学习

使用jar包: servlet-api-2.3.jarTag接口一共定义了6个方法和4个常量,其中需要我们开发逻辑的有两个方法doStartTag()和doEndTag()。WEB容器执行jsp时若遇到自定义标签的开始标记就会调用doStartTag()方法。WEB容器执行jsp时若遇到自定义标签的结束标记就会调用doEndTag()方法。四常量:SKIP_BODY:值为:0,若doS...

2019-01-20 16:34:42 311

空空如也

空空如也

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

TA关注的人

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