上一章节我们已经实现了从客户端往服务端发送数据并且通过反射方法调用服务端的实现类最后返回给客户端的底层协议。 这一章节我们来实现客户端代理类的注入。 承接上一章,我们实现了多个底层协议,procotol 有 netty,http,和 socket 三个实现类,每个实现类都有启动服务端和客户端发送数据两个方法。 问题 如何实现底层协议的选择那? 可以通过配置文件来选择协议。 单独的配置文件还是和 Spring 的配置文件结合起来那? 我们选择与 Spring 结合的配置文件,自定义一些属性的标签,这样能够更好的利用 …

2021年1月17日 0条评论 12点热度 阅读全文

代码已经发布在GIT 源代码 如何让我们自定义的注解可以像 @Service @Controller @Componet等被Spring加载到应用上下文? 方法1 自定义注解添加能被Spring识别的注解比如@Component 下面的例子增加了@Component于是自定义注解@SService 可以通过它来获取上下文中被@SService注解的bean。 @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.TYPE }) @…

2021年1月17日 0条评论 14点热度 阅读全文

为什么需要运行时代码生成 我们知道,Java 是一种强类型的编程语言,即要求所有变量和对象都有一个确定的类型,如果在赋值操作中出现类型不兼容的情况,就会抛出异常。强类型检查在大多数情况下是可行的,然而在某些特殊场景下,强类型检查则成了巨大的障碍。 例如,在对外提供一个通用 jar 包时,我们通常不能引用用户应用中定义的任何类型,因为当这个通用 jar 包被编译时,我们还不知道这些用户的自定义类型。为了调用用户自定义的类,访问其属性或方法,Java 类库提供了一套反射 API 帮助我们查找未知类型,以及调用其方法或字…

2021年1月17日 0条评论 17点热度 阅读全文

bytebuddy 导读 约定 备注 一. 类型描述(description): pkg 1.1 代码风格 : doc 1.2 modifier 修饰符 : pkg 1.2.1 ModifierContributor 修饰符上层接口 : cls 1.2.1.1 自定义一个 ModifierContributor : doc 1.2.1.2 ModifierContributor的实现 :in & impl 1.2.1.3 Resolver类 : in 1.2.1.4 其他实现 ModifierContrib…

2021年1月17日 0条评论 15点热度 阅读全文

–> go to 总目录 bytebuddy介绍 一、描述 二、总览 三、细节 3.1 glance 一撇 3.2 各类类增强工具对比 3.3 命名策略 3.4 classLoader策略 Unloaded 未加载的类的处理 ClassReloadingStrategy wrapper child-first inject 3.5 subclass & redefined & rebase subclass redefine rebase 3.6 ElementMatcher 3.7 Impl…

2021年1月17日 0条评论 26点热度 阅读全文

作者:小傅哥 博客:https://bugstack.cn - 汇总系列原创专题文章 沉淀、分享、成长,让自己和他人都能有所收获! 让人怪不好意思的,说是出书有点膨胀,毕竟这不是走出版社的流程,选题、组稿、编著、审读、加工到出版发行。 但全书共计107页,11万7千字,20个章节涵盖三个字节码框架和JavaAgent使用并附带整套案例源码! 讲道理,市面上以及网络搜索中都基本很少有成体系的关于字节码编程的知识,这主要由于大部分开发人员其实很少接触这部分内容,包括;ASM、Javassist、Byte-buddy以及…

2021年1月17日 0条评论 8点热度 阅读全文

解释: 栈是运行时的单位,而堆是存储的单位。 栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;堆解决的是数据存储的问题,即数据怎么放、放在哪儿。 在Java中一个线程就会相应有一个线程栈与之对应,这点很容易理解,因为不同的线程执行逻辑有所不同,因此需要一个独立的线程栈。而堆则是所有线程共享的。栈因为是运行单位,因此里面存储的信息都是跟当前线程(或程序)相关信息的。包括局部变量、程序运行状态、方法返回值等等;而堆只负责存储对象信息。 *************************************…

2021年1月17日 0条评论 10点热度 阅读全文

(1)数据结构与算法概念解析 (2)数据结构之数组 (3)数据结构之栈 (4)数据结构之队列 (5)数据结构之链表 (6)数据结构之二叉树 (7)数据结构之霍夫曼树 (8)数据结构之红黑树(一)——基础分析 (9)数据结构之红黑树(二)——插入操作 (10)数据结构之红黑树(三)——删除操作 (11)排序算法(一)——冒泡排序及改进 (12)排序算法(二)——选择排序及改进 (13)排序算法(三)…

2021年1月17日 0条评论 16点热度 阅读全文

正则表达式的子表达式(分组)不是很好懂,但却是很强大的文本处理工具。 1 正则表达式热身 匹配电话号码 // 电话号码匹配 // 手机号段只有 13xxx 15xxx 18xxxx 17xxx System.out.println("18304072984".matches("1[3578]\\d{9}")); // true // 座机号:010-65784236,0316-3312617,022-12465647,03123312336 String regex = "0\\d{2}-?\\d{8}|0\\d{…

2021年1月17日 0条评论 12点热度 阅读全文

前面我们安装了activiti插件,现在开始画流程图,我们通过画请假审批流程图来学习 一、流程图 请假流程审批表 leave.bpmn 所在位置 打开eclipse的Windows—>preferences,勾选如图中选项,即可生成leave.png流程图图片 二、流程图创建 右击processes文件夹 ,new—other—Activity—Activity Diagram。 然后打开新建的Activity Diagram 文件,文件扩展名为bpmn文件,打开文件后,会显示Activity 的所有组件 2…

2021年1月17日 0条评论 12点热度 阅读全文