Activiti6 Spring的加载

最近在使用Acticiti6时一直怀疑Activiti6是怎么样和Spring做整合的,以下是通过查看源码得到的思路

通过查看官网文档发现其初始化的核心是ProcessEngine类,于是我们在activiti-spring包中全局搜索,发现在资源目录下

查找到配置文件,里面Spring初始化的xml,主要的配置如下

进入ProcessEngineFactoryBean,发现其是通过实现Spring的FactoryBean接口来完成初始化

 

由FactoryBean方法的 getObject()方法来生成ProcessEngine

 

那么ProcessEngine具体是如何生成的呢?我们可以根据Spring的配置文件进入 ProcessEngine的processEngineConfiguration中看下里面实现了什么

进入后发现其本质为processEngineConfiguration的实现类,而ProcessEngineConfigurationImpl又是在xml文件中注入的,里面包含了一些activiti默认的配置,接下来代码会执行ProcessEngineFactoryBean下面的getObject()方法来生成ProcessEngine

而getObject()方法是Spring开放的接口针对复杂对象初始化而使用的,本质上和xml中编写bean文件和用注解方式完成注入差不多,实现完该接口只需要在用bean方式或者用注解方式在Spring容器中注册即可,Spring会根据getObject()方法来生成对象,且默认是单例模式生成,可通过重写 isSingleton()来改变

我们现在也许还是会疑问我们日常使用中的各种Service是如何初始化的呢,我们如图进去进入ProcessEngine的以下方法

发现返回的ProcessEngine其实是ProcessEngineImpl类

 

其构造传入了ProcessEngineConfigurationImpl这个类就是我们之前在xml中看见的默认配置的类,我们现在进去其构造方法

发现其初始化了我们日常所用的各种service,我们以RuntimeService为例发现其返回的是ProcessEngineConfigurationImpl初始化new的一个RuntimeService

到现在所有的Service都已经初始化完毕,并通过Spring xml中的

工厂构成方法完成初始化,

到现在我们也许还会以为那么这些Service到底又是怎么执行的呢?我们进入一个service,这里还是以RuntimeService为例,

我们发现其实内部是有一个commandExecutor的命令执行器,其是父类ServiceImpl的一个属性

那也许我们这里又会疑问,这个CommandExecutor又是在哪里初始化的呢?我们之前都没看见啊

其实这些方法都在ProcessEngineConfigurationImpl中我们进入ProcessEngineConfigurationImpl方法,其中有一个CommandExecutor属性这个就是执行器,接着我们往下找

发现如图的红色框中初始化了执行器代码,继续进入

其本质是一个CommandExecutorImpl,

那这个CommandExecutorImpl又是如何注入各种Service的呢?答案在以下方法中。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值