自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 资源 (4)
  • 收藏
  • 关注

原创 Spring基本使用(四)——AOP的使用方式

前言一直感觉网上很多教程和书本都把AOP写得比较复杂。因为这个概念涉及代理模式,通常会把静态代理和动态代理模式说一遍,然后AOP的概念讲一堆,但具体怎么使用却没能完整展示。因此自己决定写一篇文章简单介绍一下AOP的使用,略过一些概念性问题。关于代理模式讲AOP还是不能完全不提代理模式。静态代理和动态代理读者可以自行网上查找,不懂不太影响AOP的使用。AOP很重要一个作用是可以无入侵式地在执行一个函数前后增加处理逻辑。举个例子,如果我们希望某个模块的函数被调用的时候都写日志,例如这样:.

2020-11-15 23:50:29 7

原创 Spring基本使用(三)——关于properties文件的引入和变量的注入

前言在上一篇文章《Spring基本使用(二)——依赖注入》中,还有一个点没讲到,就是关于properties文件。现在常用的springboot中,经常会把一些配置属性写在application.properties中。写在application.properties文件中的属性,后面会注入到容器对象的属性中。本文准备先展示一下引入properties的几种方法。然后在稍微看看如何注入到对象的属性中。引入properties文件引入properties有四种方式,前三种是xml方式,最后一.

2020-10-31 01:15:25 65

原创 Spring基本使用(二)——依赖注入(包括值注入、对象注入、list、set、map注入)

概述IOC非常重要的一点是值注入。特别常用于一些初始化工作,例如数据库连接的ip、端口等信息。properties文件在springboot中非常常见,使用springboot时通常会把很多属性配置写在application.properties文件中。此外list、map等这类集合的注入也比起基本类型的注入麻烦一些,值得实践和记录一下。。...

2020-10-26 19:18:29 28

原创 Spring基本使用(一)——Spring基本配置与IOC容器用法

前言本文不打算深入介绍Spring的一些概念,因为这种概念满大街都有,我觉得我也讲不好。写这文章,主要原因在于java我是半路出家的,基本赶鸭子上架一般边用边学。所以依葫芦画瓢的工作不难,但是要自己去搭框架,去调问题,总是会遇到比较大的麻烦。因此希望把最基本的框框条条的内容记录下来,一是系统性学习,二是方便日后查询。Spring基本配置Spring的基本配置不难,用了maven之后更是简单,如此添加maven依赖即可:<project xmlns="http://maven.a.

2020-10-22 16:04:04 37

原创 Shiro学习(三)——关于Subject的创建

概述本文属于源码分析,只想了解Shiro使用的读者请略过。Subject接口是Shiro中非常重要的接口,客户端通常会使用Subject的方法进行登录、登出、鉴权、角色判断等功能。在《Shiro学习(一)——Shiro配置与快速开始》中,我们就使用了其login接口。Subject的功能似乎非常强大,那么它到底是什么,为什么能做这么多事呢,值得我们分析一下它的来龙去脉。...

2020-10-10 19:32:13 26 1

原创 Shiro学习(二)——读取配置文件与初始化SecurityManager的过程

概述Shiro最先进行的操作就是读取配置文件和初始化SecurityManager。所以首先得搞清楚这个初始化的过程到底都做了什么,尤其是接口的SecurityManager实现类是什么,以及后面用到的默认realm又是什么。另外通过这个初始化过程,我们还能稍微窥探一下SecurityManager和Realm的架构。读取配置文件在Shiro使用的例子中,最开始一般都会调用以下语句:Factory<org.apache.shiro.mgt.SecurityManager>.

2020-08-22 20:37:00 163

原创 Shiro学习(一)——Shiro配置与快速开始

前言虽然做了不少用Shiro为安全框架的项目,但是都没对Shiro做个什么研究。刚好最近有个项目,领导希望我能把Shiro框架吃透。Shiro作为一个开源框架,一直听说其源码不难读懂。我想把在activiti中学习源码的经验,也搬到Shiro上。通过源码去认知Shiro,而不是各种文档、百度去了解。因此这系列的文章,会穿插不少源码分析,对于源码无感的读者,请忽略源码解读部分。本系列文章会使用Shiro1.5.3版本,集成开发环境使用eclipse4.15.0版本。Shiro的maven配置与..

2020-08-15 14:48:25 77

原创 JavaSE源码学习(一)——定时器Timer的使用与源码分析

前言自从分析activiti5的源码之后,感觉对其使用打通了任督二脉一样。以前一直挺排斥看源码,因为效率低,看着也晦涩,总想着知道怎么用就好了。但是现在觉得如果只看如何操作,那是真的知其然不知其所以然。碰到基础的使用确实可以搞定,但稍微复杂点,来点变化就蒙了,如果有项目需要魔改(或者魔改了让你用),那只能硬着头皮看,只有看懂了源码,才能真正驾驭一个组件、一个类、一个知识点、一个框架。为什么会看起Timer的源码来,因为最近使用一个组件bboss,用于从数据库导数据到ElasticSearch中。这其

2020-08-10 22:48:08 61

原创 activiti学习(二十八)——加签

设计思路加签本质上就是让多实例任务增加一个处理任务和新增处理人。实现其实很简单,无非是增加一个task,另外内置变量里的nrOfInstances、nrOfActiveInstances各加一。实现

2020-07-28 19:32:58 601

原创 activiti学习(二十七)——涉及并行网关的节点跳转

这篇文章不会教大家如何对并行网关后的并行任务进行跳转。关于并行任务的跳转,分享牛大神有他的代码。不过我觉得并行网关分支出来的任务,无论从现实业务还是逻辑实现上,都不应该可以随意跳转。分享牛的跳转逻辑,无非是把并行分支的execution及其对应task都结束,然后跳转到目标节点上。然而这里其实涉及一些问题。从业务上来讲,某个分支流程,它自己是否要跳转到别的节点,不应该影响平行的其他任务节点,除非有明确的业务要求。从实现逻辑的角度来说,当存在多个并行网关多次分支的流程图中,跳转到某个节点时,到底需要提前结

2020-07-17 10:44:38 341

原创 activiti学习(二十六)——流程虚拟机源码分析(五)——并行网关的行为

前言

2020-07-15 23:54:54 142

原创 activiti学习(二十五)——多实例任务节点的跳转(退回、自由跳转功能)

概述相比普通任务节点跳转,多实例任务的跳转要考虑更多的因素,主要是因为多实例任务包含了父execution和子execution,子execution又有其对应的task,另外还有控制多实例任务的内置变量。这几个特殊点是处理多实例任务跳转的难点。关于普通节点跳转的处理,请参考前文《activiti学习(二十二)——常规任务节点跳转(退回、自由跳转功能)》解决思路...

2020-07-05 23:20:58 433 3

原创 activiti学习(二十四)——自定义行为类

前言前面几篇文章,我们知道每个活动节点,都有对应的行为类。activiti的扩展性极好,我们当然也可以自定义自己的行为类。

2020-06-23 17:39:48 162

原创 activiti学习(二十三)——流程虚拟机源码分析(四)——多实例任务的行为

前言通过《activiti学习(十七)——多实例任务的使用(会签功能)》一文,相信读者已经大概了解多实例任务的含义,以及流程行进中数据库的变化。本文会对流程虚拟机离开多实例任务的过程进行剖析。对象解析阶段在对象解析阶段,多实例任务便需要设置区别于普通任务的行为。我们回顾对象解析阶段源码BpmnParseHandlers.java:public class BpmnParseHandlers {//...... public void parseElement(BpmnPar.

2020-06-22 22:31:53 277

原创 activiti学习(二十二)——常规任务节点跳转(退回、自由跳转功能)

概述通过前面几篇文章的了解,目前我们已经具备足够的知识进行常规userTask的跳转。在“中国式流程”中,驳回、自由跳转等皆是通过这种改方式实现。可以说这也是玩activiti流程比较重要的一环。activiti本身没有提供驳回和自由跳转的api,可能在老外的思维里,流程是不存在倒着走,或者随意跳转的,必须严格按照连线去走。我们必须通过自己手动去实现这样的功能。但是比较头疼的问题包括:如果逐个调用实体管理类修改数据库记录,首先必须彻底摸透流程虚拟机执行情况以及流程运转时数据库变化情况,这个过于复

2020-06-09 10:53:08 538 2

原创 activiti学习(二十一)——流程虚拟机源码分析(三)——从进入到离开userTask

前言承接上文《activiti学习(二十)——流程虚拟机源码分析(二)——从开始节点离开到下个节点前》,假设execution接下来进入的节点是userTask,本文分析一下进入userTask的准备工作,到执行userTask的行为类,最后客户端调用taskService.complete方法离开userTask的过程。准备工作承接上文,会调用AtomicOperationTransitionCreateScope类:...

2020-06-08 11:29:49 566 2

原创 activiti学习(二十)——流程虚拟机源码分析(二)——从开始节点离开到下个节点前

《activiti学习(十九)——流程虚拟机源码分析(一)——流程启动源码分析》一文中最后,流程从startEvent节点执行takeAll准备离开。本文我们分析一下从开始节点到下一个节点之前虚拟机做了什么。...

2020-06-05 23:46:22 245

原创 activiti学习(十九)——流程虚拟机源码分析(一)——流程启动源码分析

流程虚拟机运转的主要工作,一个是选择流程走向,沿着连线走到对应的节点;第二个是调用对应节点的行为。不同的节点对应不同的行为,所以各个活动才有不同的功能,例如userTask、serviceTask、parallelGateWay、startEvent等等。本文来分析一下活动的行为类。...

2020-05-29 19:05:08 238

原创 activiti学习(十八)——流程虚拟机主要类的架构

想用activiti玩转中国式流程,单纯依靠普通的XXXService的api是不够的,必须要深入到数据库以及流程虚拟机的层面,修改数据库以及流程虚拟机对象,才能实现加签、减签、驳回、自由跳转之类的操作。另外,由于直接操作数据库很可能会有遗漏或者误操作,因此比较靠谱的方法是调用那些处于“中层”的api。“高层”的api就是XXXService的api,“底层”的是实体管理类的api。要熟悉这些“中层”api,需要看看源码中,activiti是如何调用这些api,这些api具体又做了什么。这样才能比较安全地处

2020-05-15 18:43:54 157

原创 activiti学习(十七)——多实例任务的使用(会签功能)

会签在中国式流程中是非常常见的需求。例如部门领导下发一个文件,需要部门里面每个员工看完之后提交流程以表示已阅。这时候需要使用activiti中的多实例任务。...

2020-05-07 12:05:05 614

原创 activiti学习(十六)——并行网关、排他网关、包含网关

网关和分支是流程图中相当重要的一环。毕竟一个流程不可能是一条直线走到底的,可能需要并行处理,也可能需要根据条件的不同选择对应的路由,网关和分支的作用正是在此。本文主要探索一下这几种网关的常用方法,以及一些特殊情况会发生什么。...

2020-05-01 15:14:38 467

原创 activiti学习(十五)——表达式的使用

本文开始重新回归一些activiti的基本使用。感觉前面太想展开源码和架构方面的探讨,但在这过程中,又涉及到activiti很多基本的用法我没有熟练使用,例如表达式、网关、多实例任务、作业、边界事件等等。导致在探讨源码的时候常常一笔带过,虽然对整体理解没有太大的问题,但是总感觉缺了点什么。所以后续决定也要熟练这些基本功能的使用。毕竟很多业务场景还是需要使用这些功能的。表达式简述activi...

2020-04-23 21:16:35 346

原创 activiti学习(十四)——activiti数据库存储(三)——实体管理类封装mybatis调用原理

上两篇文章主要分析activiti数据库相关初始化、sessionFactory初始化及创建实体管理类的原理。实体管理类封装了activiti底层增删查改操作。上层命令类程序不需要直接去调用mybatis的sqlSession,通过实体管理类间接调用。本文通过例子分析实体管理类是如何调用mybaits的。我们以DeploymentEntityManager为例:public void i...

2020-04-21 15:20:54 227

原创 activiti学习(十三)——activiti数据库存储(二)——SessionFactory架构与抽象工厂模式

看源码多了,从一开始看别人怎么实现,逐渐变成了喜欢研究别人设计的架构,看看别人的思路。activiti中使用了很多不同的设计模式,值得各位学习,日后用在自己的项目中,当然对这方面不感兴趣的请略过。本文主要是针对《activiti学习(十二)——activiti数据库存储(一)——数据连接初始化与mybatis封装》里面SessionFactory的架构进行分析。在那篇文章中,说SessionFac...

2020-04-16 11:39:12 126

原创 activiti学习(十二)——activiti数据库存储(一)——数据连接初始化与mybatis封装原理

上一篇文章中,简述了全局事件监听器的使用,本文则对全局事件监听器的源头——事件转发器进行分析。上一章使用全局监听器时,会发现监听器能捕捉到很多事件。这些事件其实都是事件转发器调用已注册的监听器的onEvent方法实现的。...

2020-04-14 17:11:47 349

原创 activiti学习(十一)——全局事件监听器的基本使用及其原理

在流程运转的过程中,流程引擎会发出很多不同的事件,前面的文章,我们通过执行监听器和任务监听器捕获到对应事件并进行处理。除了这两个监听器以外,activiti从5.15版开始加入了全局事件监听器,这样就不需要在每个活动上去绑定监听器。...

2020-04-04 12:55:55 672

原创 activiti学习(十)——自定义对象解析器

上一篇博文分析了对象解析器的原理。本文来编写一个自定义对象解析器。考虑这样的场景:生产中我们常常在流程的上一环节选择下环节的处理人,然后再提交流程。之后流程运转到下一个环节后,会在对应的处理人名下,即userTask的candidate或assignee是上环节选中的处理人。上述的实现方式可以是这样,对象解析器在解析bpmn阶段,对userTask添加自定义任务监听器,该监听器主要作用是把流程...

2020-03-30 21:22:43 260

原创 activiti学习(九)——对象解析器原理

在《activiti学习(六)——从bpmn文件转化为bpmnModel的过程》提到过,activiti会把bpmn图中的元素转化到bpmnModel中,然后再通过对象解析器,把各元素解析流程虚拟机识别的对象。本章主要讲解这个解析过程。activiti的元素非常多,这里我们仅介绍一下process及内部userTask、sequenceFlow的解析,其他元素请自行研究。简单来讲,流程虚拟机会...

2020-03-22 18:43:13 447

原创 activiti学习(八)——自定义拦截器和命令类

上一章我们activiti的命令、拦截器等进行了剖析。我们已经很很熟悉其执行的原理,本章我们自己动手写拦截器和命令类。

2020-03-17 16:25:53 274

原创 activiti学习(七)——命令模式和职责链模式在activiti中的应用

activiti中很多api的调用,最终会把这个调用封装成一个命令,使用命令模式去调用。另外还会把命令放在调用链上,当调用该命令时会依次调用职责链上的每一个拦截器(Interceptor),例如日志、事务相关拦截器,然后调用指定的命令。本章先对这两种设计模式进行介绍命令模式命令模式其作用是为了对“行为请求者”和“行为实现者”这两者进行解耦。下图是命令模式的UML图。其中HelloComma...

2020-03-16 23:18:39 227

原创 activiti学习(六)——从bpmn文件转化为bpmnModel的过程

在《activiti学习(二)——activiti流程的部署》一文中,提到过activiti会把bpmn文件转化成bpmnModel。本文对将这个过程做介绍。我们从部署的实例入手,根据之前的部署命令deploymentBuilder.deploy()跟踪下去,查看DeploymentBuilderImpl.java:public Deployment deploy() { ret...

2020-03-10 19:01:42 1318 1

原创 activiti学习(五)——执行监听器与任务监听器的基本使用

本章先介绍监听器的基本原理和使用方法。当流程途径连线或者节点的时候,会触发对应的事件类型。监听器在生产中经常会用在几个方面:动态分配节点处理人。通过前一个节点设置的变量,在运行到下一个节点时设置对应的处理人;进行一些业务系统处理。例如发送邮件,或统计流程处理时长(公司按上班时间统计)、业务层面数据处理等等。activiti监听器activiti有两种监听器,分别是任务监听器和...

2020-03-09 16:30:35 4070

原创 activiti学习(四)——任务查询与任务提交

上一章流程启动后,根据流程图,会到达用户任务userTask1上。通常实际应用中,流程使用userTask比较多。因此本章就讲讲userTask提交。首先我们新建一个bpmn图,secondBPM.bpmn<?xml version="1.0" encoding="UTF-8"?><definitions xmlns="http://www.omg.org/spec/...

2020-03-05 15:56:13 358

原创 activiti学习(三)——activiti流程引擎的服务、数据库表与流程启动

activiti流程引擎的服务activit流程引擎为用户提供了好几种服务及api,用于查询和操作流程,通过ProcessEngine的getXXXService方法可以获取。现在对几个接下来会用得比较多的进行介绍:RepositoryService:主要用于查询和操作与部署有关的api。在流程部署的章节中,就是通过这个服务进行流程部署的; RuntimeService:流程实例的操作与...

2020-03-04 21:18:18 452

原创 activiti学习(二)——activiti流程的部署

进行了流程引擎的构建和初始化之后,接下来要做的就是把写好的流程文档部署到流程引擎中,后续activiti.cfg.xml的配置如果没有特指的话,一般就用第一章提供的例子。首先画一个bpmn的图,可以通过集成开发环境的插件,也可以直接写xml形式,但是后缀名必须是bpmn或bpmn20.xml,引擎会对后缀名进行检查。这里先写一个xml形式的bpmn图firstBPM.bpmn:&lt...

2020-03-03 17:32:22 372

原创 activiti学习(一)——activiti流程引擎的配置与初始化操作

前言activiti是影响力比较大的工作流引擎之一。虽然近年来由于发展观念等原因导致开发人员分道扬镳,flowable和camunda的发展势头都很猛,尤其是camunda,很有可能独占未来工作流引擎的鳌头。比较可惜目前市面上关于工作流引擎的教程比较少,flowable和camunda就更少了。而工作流引擎中比较基础的用户api通常很难以满足中国式流程(撤回、跳转等)需求。有幸拜读冀正、张志祥...

2020-03-03 15:00:36 652

原创 图形化系统开发组件X-Series(一)——XrossUnit介绍

在系统开发的时候,设计阶段我们一般会把系统的各个功能模块划分出来。每个功能模块中,可能会有若干个处理步骤。在设计时,我们通常会画一些简单的图以描述其处理过程,方便团队沟通和自己理解。然后实际编码阶段,根据梳理好的过程逐个编写处理步骤。相信各位在开发比较庞大的项目,或者接手项目进行二次开发时,最头疼的问题是觉得模块间调用太复杂,自己不拿张纸画图都搞不清系统很多处理过程是怎么回事,另外可能做着做着...

2020-01-04 22:42:41 64

原创 图形化系统开发组件X-Series(三)——关于xunit源码跟踪的理解

一、关于xunit图的加载和初始化所有xunit代码,加载一个xunit文件,都要先执行XunitFactory f = XunitFactory.load("new_xross_unit.xunit");这个函数干的事主要干这几件事1、读取传入的xunit文件,例如我们这里传入的“new_xross_unit.xunit”,这个文件是一个xml文件。2、开始解析xml...

2019-12-20 19:13:02 56

原创 图形化系统开发组件X-Series(二)——XrossUnit入门使用

1、从github上下载源码git clone https://github.com/hejiehui/xUnit2、通过import一个maven项目导入eclipse,xunit项目是源码,xunit-sample是官方的例子。xunit基本的使用方式可以跟着例子慢慢学。editor是图形界面的编辑器,需要自行编译后放到eclipse的插件中。3、新建一个普通的mave...

2019-12-20 19:02:10 99

原创 关于搭dubbo-demo的一些坑

刚开始学dubbo,根据官网annotation的demo搭一个。折腾了一天才搭起来。总结一下经验:1、接口问题:首先DemoService这个接口一定要是一个消费者和生产者共同引用的接口。我搭的时候,生产者项目里写一个DemoService,消费者项目里写一个DemoService。虽然两个看起来是一模一样,但是实际上不是同一个接口,类名是不一样的。所以导致启动消费者时@referenc...

2019-07-30 13:08:39 113

Linux内核设计的艺术

看过几本讲内核书,有些门槛很高,必须对内核有一定了解。或者有些则讲得不够底层,还是从比较高层的概念去讲问题。 这本书比较好,讲得很细,图文并茂,而且从计算机开机开始讲,让人感觉对内核入门并没有那么难

2014-08-30

LoadRunner入门与提升

LoadRunner入门与提升这本书主要是对应惠普的LoadRunner软件。LoadRunner功能非常强大,可以做压力测试、性能测试等。这本书写得很细,对LoadRunner的不少功能都做了使用的描述

2014-08-30

dubbo-admin-2.6.0.war

dubbo-admin,用于监控和调试dubbo生产者和消费者的工具。本资源是已打包的war,放入tomcat中运行即可。初始帐号密码是root/root

2019-10-08

2004-2013软考网络工程师历年试题答案及详解

2004-2013软考网络工程师历年试题答案及详解,附有答案和详细解释,考生可作参考

2017-02-13

空空如也

空空如也

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

TA关注的人 TA的粉丝

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