- 浏览: 219665 次
- 性别:
- 来自: 杭州
最新评论
-
lijingyao8206:
爱淘宝的大伟 写道美女cto,StackMapTable: n ...
JVM StackMapTable 属性的作用及理解 -
jzzwy:
分析的挺好,比官方文档易懂
ASM系列四 利用Method 组件动态注入方法逻辑 -
爱淘宝的大伟:
美女cto,StackMapTable: number_of_ ...
JVM StackMapTable 属性的作用及理解 -
geniusian:
博主这篇文章对于锁的理解很全面,也比较深入,长期关注,希望更多 ...
基于Redis实现分布式锁-Redisson使用及源码分析 -
lijingyao8206:
EventSourcing 作为上下文的解耦方式很好,但是也会 ...
领域驱动设计整理——概念&架构
文章列表
基于Docker的微服务架构-企业级服务集群实践之服务发现
基于Docker的微服务架构-企业级服务集群实践之进程间通信
各位老铁们,博主的博客迁移到了CSDN,后期博客会继续在CSDN上持续维护。
传送门: http://blog.csdn.net/lijingyao8206
在分布式场景下,有很多种情况都需要实现最终一致性。在设计远程上下文的领域事件的时候,为了保证最终一致性,在通过领域事件进行通讯的方式中,可以共享存储(领域模型和消息的持久化数据源),或者做全局XA事务( ...
综合前两篇总结,这篇对领域服务和领域事件做一个梳理。先注明一下,领域服务和应用服务。SOA服务,或者应用间的RPC调用,Restful接口,或者通过消息中间件进行系统间的交互的,都可以归类为应用服务。相较之下,领 ...
实体
引言
在领域驱动设计里,实体的设计可以说是通用语言的核心,也是最开始在模型划分中需要考虑的。怎么样设计实体和怎么样划分限界上下文同样重要。实体的概念就是要保证通用语言的完整性。领域驱动让设计实体的关注点从数据的属性和表的关联转化到了富有行为的领域概念上。
实体是具有可变性的,这是一个和值对象比较明显的区分,也即实体是可以持续得变化,持续得修改,并且具有唯一的标识。在设计实体的时候需要跳出CRUD的设计思维。把关注重点从数据模型设计转移到实体模型上。实体是能够表达什么概念,具有哪些行为,领域范围是哪些。实体的唯一标识是用来区分实体的,在实体的整个生命周期中这个唯一标识都是不 ...
领域、子域、限界上下文
DDD(Domain-Drive Design)的概念或者说业界的声音其实可以追溯到几十年前了。最近开始想要系统得整理一下DDD的一些东西。这一篇是一个简单的引子,也是mark一下自己接触到的概念和理解。 对于领域 ...
一、Consul 介绍
Consul 提供了分布式系统的服务发现和配置的解决方案。基于go语言实现。并且在git上开放了源码。consul还包括了分布式一致协议的实现,健康检查和管理UI。Docker 的简单介绍,可以参考前面一篇文章。配合Docker来做应用容器,用Consul 来做集群的服务发现和健康检查,并且还可以轻量级得做到水平和垂直可扩展。
二、Consul Agent、Server、Client
通过运行 consul agent 命令,可以通过后台守护进程的方式运行在所有consul集群节点中。并且可以以server或者client ...
Vagrant提供了可配置、可复用的虚拟开发和部署环境,对于开发人员来说,Vagrant可以帮你统一团队成员的开发环境。也可以提供一套一致的线上线下环境。vagrant 在mac上通过命令行工具可以管理统一的镜像(BOX)所以v ...
一、转换方法的字节码
利用Tree Api转化方法字节码,其实也就是对MethodNode对象的InsnList的操作。通过获取InsnList的迭代器,可以直接add 或者remove方法的指令。如果需要添加比较多的指令集,那么可以把指令集分开 ...
Java是解释执行的,包括动态链接的特性,都给解析或运行期间提供了很多灵活扩展的空间。面向对象语言的继承、封装和多态的特性,在JVM中是怎样进行编译、解析,以及通过字节码指令如何确定方法调用的版本是本文如下要探讨的主要内容,全文围绕一个多态的简单举例来看在JVM中是如何实现的。
先简单介绍几个概念。对于字节码执行模型及字节码指令集的相关概念可以参考之前的一篇介绍http://yunshen0909.iteye.com/blog/2220937。
一、方法调用的解析
一、MethodNode概述
ASM的TreeApi 对于Method的转换、生成也提供了一系列的组件和接口。其功能主要基于前一章提到的MethodNode类。MethodNode中大多数属性和方法都和ClassNode类似,其中最主要的属性就是InsnList了。InsnList是一个双向链表对象,包含了存储方法的字节指令序。先来看下InsnList中的主要是属性和方法。
public class InsnList { // public accessors omitted
private int size;
private Abstract ...
同生成的做法一样,添加和移除类成员只要去修改fields和methods中的元素即可。这里我们拿一个简单的类做例子,下面这个Task类,我们来移除isNeedRemove方法,并且添加一个int 类型的addedField属性。
package asm.core;
/**
* Created by yunshen.ljy on 2015/6/8.
*/
public class Task {
private int isTask = 0;
public void tellMe(){
System.out.print ...
前面CoreApi的介绍部分基本涵盖了ASMCore包下面的主要API及功能,其中还有一部分关于MetaData的解析和生成就不再赘述。这篇开始介绍ASM另一部分主要的Api。TreeApi。这一部分源码是关联的asm-tree-5.0.4的版本。
在介绍前,先要知道一点, Tree工程的接口基本可以完成大部分我们之前介绍的Core中的功能。但是在实际使用中更加便利,当然也会更加消耗时间和性能。完成一个简单的生成编译后的Class字节码的任务,可能会花费多余Core的30%的时间,同时也会消耗更多内存。但是通过下面的介绍,相信在选择用哪种Api上,我们也会做出自己的取 ...
这篇继续结合例子来深入了解下Method组件动态变更方法字节码的实现。通过前面一篇,知道ClassVisitor 的visitMethod()方法可以返回一个MethodVisitor的实例。那么我们也基本可以知道,同ClassVisitor改变类成员一样,MethodVIsisto ...
一、概述
ASM的CoreApi 中还提供了对class 中方法的生成和解析的组件。前面两篇着重介绍了ClassVisitor 组件的应用场景。ClassVisitor Api 中的visitMethod(int access, String name, String desc, String signature, String[] exceptions)方法返回了一个MethodVisitor对象,MethodVisitor类提供了对于字节码文件中方法的字节码进行解析。同ClassVisitor一样,MethodVisitor的实例方法也需要按照一定的顺序调用。
v ...