java类加载
java类加载本文主要是说明java 类加载的全过程,即JVM把class文件加载到内存,并对数据进行校验、准备、解析、初始化,最终形成JVM可以直接使用的Java类型的过程。
全过程如图,可以看到整个过程还是有很多步骤的,下面就具体步骤进行说明。
加载加载阶段很简单,当程序执行到需要的类时,JVM 会通过类加载器将class字节码文件加载到内存中,并将这些数据转换成方法区中的运行时数据(静态变量、静态代码块、常量池等),在堆中生成一个Class类对象代表这个类(反射原理),作为方法区类数据的访问入口。
链接将Java类的二进制代码合并到JVM的运行状态之中,里面包含验证、准备和解析。
验证对具体的内容进行校验,确保Class文件的字节流中包含对信息符合Java虚拟机规范,包括验证文件格式、元数据、字节码、符号引用等验证。
准备正式为类变量(static变量)分配内存并设置类变量初始值的阶段,这些内存都将在方法区中进行分配。但需要注意的是,此时的设置初始值为默认值,具体赋值在初始化阶段完成。
解析虚拟机常量池内的符号引用替换为直接引用(地址引用)的过程。
初始化初始化阶段是执行类构造器 ...
MAVEN项目版本号约定(根据运行环境选择不同依赖版本)
MAVEN项目版本号约定(根据运行环境选择不同依赖版本)目的 在目前的微服务项目开发中,由于基础服务所提供依赖的版本不规范,在上线时踩过不少坑,为了解决这个问题,并且实现多环境构建时,根据不同环境切换不同版本的内部依赖,所以进行整理输出,意图规范项目的版本号管理,简化版本变动的操作,降低人工操作带来的风险。
说明需要推送到私服被其他服务依赖的jar包,才需要进行版本变动,其他项目模块包括项目父pom,都是固定版本,暂定:0.0.1-SNAPSHOT,不进行版本变动。同项目的模块依赖,在每次构建时会一起构建,也不需要进行版本变动。
约定
推送到私服的jar包,需要保持精简,减少其他的内部依赖,原则上只包含服务接口声明和返回的数据模型类;
开发环境使用0.0.1-SNAPSHOT,测试环境使用 1.0.0-SNAPSHOT,生产环境使用正式版本:X.Y.Z.RELEASE;
开发环境可根据开发需要自行Deploy,测试和生产由专人Deploy,在提测后或发版前,进行推送。
项目配置提供依赖的项目 B:修改B 项目根目录的pom.xml,在中增加三个配置
12345678910111213 ...
Spring-Framework-简谈
Spring Framework 简谈前言在目前Java 软件开发中,Spring框架可谓是大行其道,但在日常业务开发中,基本都是浅尝辄止,使用着基本的几个特性,对于Spring框架的整体架构以及相关原理,往往会欠缺了解和思考,虽然在某种层面来说它只是一个代码工具,但也应该需要了解其所提供的功能和相关原理,才能更好的使用。
本篇内容基本来自Spring 的官网,主要是说明Spring Framework 项目整体的架构体系,对Spring Framework 包含的模块做相关的解析,暂不对相关原理的做解析。
概述本文就下图做展开说明,由于目前官网没有找到最新的5.X版本概览图,就先拿4.3.27.RELEASE版本做说明,然后再对5.x版本做单独说明:
Core Container核心容器(Core Container)是由spring-core、spring-beans、spring-context、spring-context-support和spring-expression(Spring表达式)模块组成。
spring-core和spring-beans模块是框架的基本 ...
缘起
你好,朋友!这是我的个人主页,会有一些学习记录、技术分享、生活感悟、一些不成熟的想法等,其实主要还是自己在Java 开发这条路上所经历的吧,希望在给我带来帮助的同时,或许也能给你带来一些体会。
因为做事较为理想主义,追求完美,总希望把所有的事情从一开始尽可能做到完美,在建站的时候,反复纠结用什么方式开写这个博客,包括域名、技术选型、博客主题等,却不曾意识到,世间难以存在完美的事物,与其长期纠结苦苦思索,不如先进行下一步,说不定后面就有思路呢?
索性,先大概这样吧~多写文章 充实内容才是王道!
// todo 希望后面看到这里的自己,能够有所补充