分享好友 最新动态首页 最新动态分类 切换频道
activiti7源码分析之引擎初始化与Bean注入
2024-12-26 23:23

看完美团、字节、腾讯这三家的一二三面试问题,是不是感觉问的特别多,可能咱们真的又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。

开篇有提及我可是足足背下了Java互联网工程师面试1000题,多少还是有点用的呢,换汤不换药,不管面试官怎么问你,抓住本质即可!能读到此处的都是真爱

  • Java互联网工程师面试1000题

而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的 《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题。

  • 程序员代码面试指南–IT名企算法与数据结构题目最优解
  • 其余像设计模式,建议可以看看下面这4份PDF(已经整理
  • 更多的Java面试学习笔记如下,关于面试这一块,我额外细分出Java基础-中级-高级开发的面试+解析,以及调优笔记等等等。。。

以上所提及的全部Java面试学习的PDF及笔记,如若皆是你所需要的,那么都可发送给你

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取


首先第一个问题,activiti7的初始化工作是怎么启动呢?我得从盘古开天辟地说起,顺便复习下Springboot相关知识。

Springboot的main函数上有个注解@SpringBootApplication,我们看下这个注解的的实现,只看关键部分

在这段代码中有一个关键的注解@EnableAutoConfiguration,这个注解的作用是顾名思义的就是允许自动配置,怎么实现呢,继续看@EnableAutoConfiguration的源码

在这段代码中,@Import({AutoConfigurationImportSelector.class})的作用是将AutoConfigurationImportSelector这个类注册为Bean交给容器管理。这个类里面有个关键方法public String[] selectImports(AnnotationMetadata annotationMetadata),作用是扫描所有包(包含依赖jar包)中的META-INF/spring.factories文件,把其中key为"…EnableAutoConfiguration"对应的value里的类都加载为Bean。

看下activiti-spring-boot-starter这个包中spring.factories文件的内容

所以,这个文件里面的三个类都被加载为Bean。即EndpointAutoConfiguration,ProcessEngineAutoConfiguration,ActivitiMethodSecurityAutoConfiguration这三个。这就是Springboot的自动配置原理。总结起来就是@EnableAutoConfiguration会自动扫描所有包下面的META-INF/spring.factories文件,将其中key以EnableAutoConfiguration结尾的对应的value的类全部加载为Bean。这就是SPI机制,与JDK中的SPI和DUBBO的SPI类似,但是具体实现方法不一样。关于SPI我之后会详细讲解。

我们关注ProcessEngineAutoConfiguration这个Bean,其余两个以后再解释。

看下ProcessEngineAutoConfiguration这个类部分的源码

这个类主要作用的就是流程引擎的配置,注解@EnableConfigurationProperties({ActivitiProperties.class, AsyncExecutorProperties.class})会将在properties中的配置属性映射到对应的类的属性中去。例如常用的在application-dev.properties配置的database-schema-update,history-level,db-history-used等属性就是在这里被映射到类ActivitiProperties中去的,然后在SpringProcessEngineConfiguration springProcessEngineConfiguration()方法中添加到引擎配置类中的。

ProcessEngineAutoConfiguration中会注册很多Bean,其中有个比较重要

SpringProcessEngineConfiguration这个Bean主要负责流程引擎的配置,将数据源和Springboot配置文件中配置的activiti7的相关属性配置到引擎中去。这个Bean被注解@ConditionalOnMissingBean修饰,意思是只有在容器中不存在SpringProcessEngineConfiguration的情况下这个Bean才会被注册,因此如果要自定义自己的引擎配置,重新定义一个SpringProcessEngineConfiguration类型的Bean即可。

ProcessEngineAutoConfiguration继承了AbstractProcessEngineAutoConfiguration,这个抽象类里面定义了几个比较重要的Bean

ProcessEngineFactoryBean这个Bean的主要作用产生ProcessEngine Bean,可以理解为是产生Bean的Bean,比较拗口。这个Bean实现了FactoryBean接口,FactoryBean接口是spring里面一个接口,与它长得比较类似的事BeanFactory,它们作用完全不一样。FactoryBean是一个工厂Bean,可以生成某一个类型Bean实例,它最大的一个作用是:可以让我们自定义Bean的创建过程。BeanFactory是一个接口,它是Spring中工厂的顶层规范,是SpringIoc容器的核心接口,它定义了getBean()、containsBean()等管理Bean的通用方法。Spring的容器都是它的具体实现,它负责管理所有的Bean,包括FactoryBean。

上面说到FactoryBean可以让我们自定义Bean的创建过程,那么怎么定义呢,方法很简单,只要实现FactoryBean的getObject方法即可。看下ProcessEngineFactoryBean中getObject的实现

这里返回的类型也就是这个ProcessEngineFactoryBean产生的Bean即为Processengine。说了这么多,可以简单概括为ProcessEngineFactoryBean主要是负责产生一个Processengine,实现引擎Bean的注入。

这个抽象类中还注入了其他常用的Bean,例如RuntimeService,RepositoryService,HistoryService,TaskService等。

与这个过程类似,在初始化的时候还加载了许多其他类型的Bean。

在ProcessEngineFactoryBean的getObject方法是为了创建Processengine,其中最关键的代码

this.processEngine = this.processEngineConfiguration.buildProcessEngine();跟进去看这里的buildProcessEngine()的具体实现

其中的this.autoDeployResources(processEngine);会在项目启动的时候将classpath*😗*/processes/目录下的流程图自动部署。可以通过spring.activiti.deployment-mode这个属性设置各种不同的部署策略。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

讲解视频+实战项目源码】](https://bbs.csdn.net/topics/618154847)收录**

最新文章
重点建设学科软件投入与执行情况验收表模板
《重点建设学科软件投入与执行情况验收表模板》由会员分享,可在线阅读,更多相关《重点建设学科软件投入与执行情况验收表模板(1页珍藏版)》请在装配图网上搜索。
警惕!手机里的这些APP一定要卸载!!!
国家计算机病毒应急处理中心近期通过互联网监测发现,这些移动App存在隐私不合规行为。1、未声明App运营者的基本情况、未声明隐私政策时效。涉及10款App如下:《医家助手》(版本1.11,应用宝)、《乐护》(版本1.08,)、《亲亲熊识字》(
百度地图修改店铺名称
实体店为什么要在微信上做?现在很多聚餐约会,都会提前在美团或者其他平台选择好门店,在微信发送位置给朋友,这个时候要是你的门店在微信发送位置时搜索不到,可能就会损失一定的客户,微信位置看似小,但却很重要,能给客户带来很多便利
无需插件即可优化 WordPress 速度的 12 种策略
为什么要尝试在没有插件的情况下优化 WordPress 网站的速度?缓慢的网站不仅仅会带来一些小不便,而且当您尝试建立在线成功时,它是一个重大障碍。事实上,根据Portent2022 年的一项研究,在加载页面的前五秒内,每增加一秒,网站转化率平
精品与普通商品之间的差异究竟体现在哪些方面?
在现今的商品市场中,我们经常听到“精品”一词,而这一词汇正是消费者对高质量、高价值的商品所做的总结性描述。那么,精品与普通商品之间的差异究竟体现在哪些方面呢?以下为您进行详细的解析。精品往往在设计中融入了独特的创意和设计理
全球十大购物网站排行榜(转)
  现今社会所有都计算机化,你只需拥有一台计算机,连接互联网,便可以轻轻松松地把所有事情处理妥当,大至个人财务金融管理、小至买本书或买件衫,都可于网络上完成交易。话虽如此,但对于fashion人来讲,最大乐趣莫过于逛街试衫,享受
抖音广告投放如何跳转至微信?
抖音已成为企业吸引潜在客户的重要渠道,创意的短视频总是为企业带来源源不断的流量。然而,如何才能最大化应用抖音的流量,扩大它的价值呢?这里,我们将结合「商加加」进行辅助阐述。那么接下来本文将探讨抖音广告投放如何跳转至微信,以
车载电脑如何进行系统更新?
车载电脑进行系统更新主要有以下几种方式和相应的操作步骤。 在线升级:新能源车型通常能联网在线升级,就跟手机升级系统类似,方便简单。 U盘升级:适用于大部分燃油车型。先找到自己车型的升级包并下载复制到U盘中。比如在“手机迅雷”搜
怎么把百度网盘的照片批量保存到手机图片库
在使用百度网盘时,如果需要将照片批量保存到手机图片库,可以按照以下步骤操作:1. 打开百度网盘应用,并登录到自己的账号。2. 在首页顶部找到"我"选项,点击进入个人中心。3. 在个人中心页面中,找到并点击"设置"选项。4. 进入设置页面后
相关文章
推荐文章
发表评论
0评