首先引用Wiki的介绍一下Hasor:
“Hasor是一款开源框架。它是为了解决企业模块化开发中复杂性而创建的。Hasor遵循简单的依赖、单一职责,在开发多模块企业项目中更加有调理。然而Hasor的用途不仅仅限于多模块项目开发。从简单性、松耦合性的角度而言,任何Java应用都可以从中受益。Hasor与Struts,Hibernate等单层框架不同,它可以提供一个以统一、高效的、友好的方式构造整个应用程序。并且可以将这些单层框架建立起一个连贯的体系,可以说Hasor是一个搭建开发环境的框架。这一点与Spring比较相似,您可以理解Hasor可以作为Spring之外的一种选择。”
昨天忙乎到很晚终于确定了Hasor一个明确的启动过程。目前启动过程已经设计的比较清晰了,相比以前凌乱的设计显得优雅许多。接下来就是要对hasor做“手术”实现它们了,在这里首先将其设计思想介绍给大家。
主要结构:
在介绍Hasor生命周期之前先要说明的是在hasor中其主要的部分有三个:配置文件处理(Settings)、应用环境上下文(AppContext)、Guice3.0增强(ApiBinder)。在整个启动生命周期中上述三个部分可以使用的顺序是Settings->ApiBinder->Context。下面这张图罗列了Hasor核心接口功能和这三个部分的依赖关系:

上图中详细的罗列出Hasor的主要功能及其依赖关系。图中红色部分是Hasor的三个最基本部件,可以看出Settings、ApiBinder、AppContext三者是一个递进的关系。在Hasor启动生命周期中也是如此,当你可以使用ApiBinder时就意味着你此时不能使用AppContext,只能使用Setting相关功能。下面是各个部件的介绍。
Settings部件
Xml映射方式
在Hasor中Settings接口主要负责配置文件的解析工作。Settings提供了一种统一的方式解析Xml,它会将Xml的所有数据按照Xpath的路径转变成为Key/Value键值对并以Map形式保存。例如Xml配置和映射关系如下:
<!-- 系统内置帐号信息 --> <loginSafe enable="true"> <!-- 登陆表单递交位置 –> <loginFormURL>/s_j_check</loginFormURL> </loginSafe> ------------------------映射结果为------------------------ 系统内置帐号信息 loginSafe = <XmlProperty类型对象> loginSafe元素的enable属性 loginSafe.enable= true 登陆表单递交位置 loginSafe.loginFormURL = /s_j_check
注意1:当你的标签属性名和子元素名重名时Settings并不能有效的区分它们,此时你应当获得标签的 XmlProperty 接口使用DOM方式来获取你想要的东西。我不推荐将Xml标签的属性名和子标签使用相同名称。这样做会很容易混淆对Xml配置的理解。试想当你在看到一个标签有enable属性同时又看到子标签也叫 [ye'jz]有一个enable时,你一定不会第一时间知道哪个才是真正的启用禁用设置项。
注意2:使用Key/Value键值对获取配置信息时Settings会忽略大小写敏感。在上面的例子中使用“loginsafe.enable” 或 “LOINGSAFE.ENABLE” 都可以获取到映射的属性值 “true”。
DOM方式操作配置文件
在Hasor中使用Settings接口尝试获取的Xml配置项如果是一个标签元素那么可以采用getXmlProperty()方法获取XmlProperty接口对象,该接口对象提供XML的DOM操作。
ApiBinder部件
ApiBinder接口的设计初衷是负责提供模块启动过程中在AppContext尚未形成时的支持,这其中包含了Guice的Binder接口。用过Guice的朋友一定会熟悉Guice在Binder接口上提供了各种绑定的功能,当然这包括了定义Aop。详细有关Guice3.0的介绍您可以到Guice官方网站查看。Hasor不会直接提供给开发者Guice的Binder接口,不过开发者可以通过ApiBinder接口来获取Binder接口,这正式ApiBinder接口的作用之一。通过ApiBinder可以得到Settings及其相关部件的各种功能。此外注册Bean也是由ApiBinder提供。需要注意的是“ApiBinder接口仅仅在OnInit生命周期阶段有效”因为此时正在调用Guice.createInjector方法创建Injector对象,所以请不要将ApiBinder接口的引用保留到OnInit阶段之外,那样做是不安全的。
AppContext部件
AppContext接口负责支撑整个Hasor平台的运行,通过AppContext你可以轻松的管理当前系统的所有已加载模块,而且还可以像Spring一样通过服务名获取服务实例。AppContext提供了阶段性心跳事件(Timer)的支持。更多的AppContext信息请参看相关文档。
启动过程与模块生命周期
经过上面的介绍想必读者对Hasor的核心部件有了一定的了解。本文的最终目的是为了阐述Hasor的生命周期从启动到销毁各个阶段都做了什么、能做什么!那么下文正式开始阐述生命周期相关内容。右边的图展示了(Hasor生命周期、Hasor事件、模块生命周期)三者之间的关系。
-
load ns.prop 阶段(一)
该阶段是创建Settings部件的必要过程,目的是为了Settings即将执行的Xml解析做准备。该阶段会读取classpath路径中所有“ns.prop”属性文件,并装载该文件中定义的Xml命名空间和对应的解析器汇总到一起注册到Hasor特有的Xml解析工具上。通过这个工具不同的命名空间解析器会收到属于它们命名空间下的Xml事件流。
提示:并虽然Hasor支持对每个模块都有可以有自己的Xml命名空间,但是我更建议使用不同的Xml标签作为模块配置内容的分界。
(Hasor的Xml解析工具用的是Stax方式处理Xml并将解析结果转换为类似Sax的事件流,该工具可以将Xml事件流分割到不同的命名空间)
- load Config.xml 阶段(二)
该阶段是创建Settings部件的必要过程,主要目的是为了解析装载Xml配置文件。在Hasor中配置文件被分为两类:主配置文件(config.xml)和静态配置文件(static-config.xml)。Settings会在运行时监控config.xml配置文件的变化;并且自动重载变化的config.xml,而static-config.xml就不支持这种特性。在该阶段其具体处理过程分为如下三步:
第一步:处理"static-config.xml"配置文件,使其生成一组Key/Value键值对(使用Map封装)。
第二步:用同样的方式载入“config.xml”,但是与处理“static-config.xml不同的是处理“config.xml”不需要考虑classpath中存在多个“config.xml”的情况。并且将config.xml解析的最终结果合并并覆盖第一步产生的结果中。
第三步:装载“config-mapping.properties”属性文件,该属性文件的作用是为某个Settings配置项目起一个别名。在配置文件升级时该功能可以有效的将老配置项移植到新版配置文件上。值得注意的是当起的别名和现有配置项目遇到冲突时,Settings会抛出一条警告,同时放弃这条记录的处理。
提示:目前Hasor还不支持XSD验证功能。
-
do Start 阶段(三)
这个阶段,会引发(OnInit、OnStart)两个事件。由这两个事件分别处理模块中对应的OnInit和OnStart生命周期方法。模块通过OnInit阶段可以利用ApiBinder接口在初始化阶段完成一系的绑定工作,而后当所有模块都初始化完毕之后在通过OnStart阶段完成后续操作。
-
Run 阶段(四)
该阶段当所有模块都已经完成初始化并且启动之后进入该状态,在Run阶段Hasor会定时触发一次Timer事件。开发人员可以利用Timer处理一些应用程序运行中的小任务。开发人员可以通过ApiBinder或者注册AppEvent监听器来使用这个功能。
-
do Stop 阶段(五)
通过调用stop或destroy方法可以引发该阶段的阶段性事件。OnStop事件会被传播到所有模块,用以通知模块停止服务的提供。此外start方法还可以将已经处于停止运行下的服务start方法重新启动。
-
do Destroy 阶段(六)
destroy方法可以引发该阶段,该阶段标志着整个App应用被销毁。被销毁的应用程序不会接受再次启动。
生命周期状态转换
项目主页:http://www.oschina.net/p/hasor
项目托管地址:https://github.com/zycgit/hasor
作者邮箱:zyc@hasor.net
相关推荐
1. **IoC容器**:Hasor 的IoC容器是整个框架的基础,它负责管理对象的生命周期和依赖关系。通过定义bean的配置,可以实现对象的自动创建、初始化、注入和销毁,极大地减少了代码中的硬编码依赖,提高了代码的可维护...
通过定义bean的生命周期,Hasor能自动完成对象的创建、初始化、注入以及销毁等操作。 3. **插件化机制**:Haser框架支持插件化开发,开发者可以编写自己的插件来扩展框架的功能。这种机制使得Hasor具备高度可定制性...
1. **依赖注入(Dependency Injection,DI)**:Hasor提供了一种基于注解的DI机制,允许开发者在不直接创建对象的情况下,通过框架自动管理对象的生命周期和依赖关系。这降低了代码间的耦合度,提高了可测试性和可...
内容概要:本文详细介绍了基于FPGA的电机控制系统设计方案,重点探讨了Verilog和Nios2软核的协同工作。系统通过将底层驱动(如编码器处理、坐标变换、SVPWM生成等)交给Verilog实现,确保实时性和高效性;同时,复杂的算法(如Park变换、故障保护等)则由Nios2处理。文中展示了多个具体实现细节,如四倍频计数、定点数处理、查表法加速、软硬件交互协议等。此外,还讨论了性能优化方法,如过调制处理、五段式PWM波形生成以及故障保护机制。 适合人群:具备一定FPGA和嵌入式系统基础知识的研发人员,尤其是从事电机控制领域的工程师。 使用场景及目标:适用于希望深入了解FPGA在电机控制中的应用,掌握软硬件协同设计方法,提高系统实时性和效率的技术人员。目标是通过学习本方案,能够独立设计并实现高效的电机控制系统。 其他说明:本文不仅提供了详细的代码片段和技术细节,还分享了许多实践经验,如调试技巧、常见错误及其解决办法等。这对于实际工程项目非常有帮助。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
计算机数控(CNC)装置.pdf
内容概要:本文详细介绍了使用西门子PLC和TiA博途软件构建冷热水恒压供水系统的具体方法和技术要点。主要内容涵盖变频器控制、模拟量输入输出处理、温度控制、流量计算控制及配方控制等方面。文中不仅提供了具体的编程实例,如LAD和SCL语言的应用,还分享了许多实用的经验和技巧,例如模拟量处理中的滤波方法、PID控制的优化策略、流量计算的高精度算法等。此外,针对实际应用中的常见问题,如信号干扰和参数整定,作者也给出了有效的解决方案。 适合人群:从事自动化控制系统开发的技术人员,尤其是对西门子PLC和TiA博途有一定了解并希望深入掌握冷热水恒压供水系统设计的专业人士。 使用场景及目标:适用于工业环境中需要精确控制水压、温度和流量的冷热水供应系统的设计与维护。主要目标是帮助工程师理解和实施基于西门子PLC和TiA博途的冷热水恒压供水系统,提高系统的稳定性和效率。 其他说明:文中提到的实际案例和编程代码片段对于初学者来说非常有价值,能够加速学习进程并提升实际操作能力。同时,关于硬件配置的选择建议也为项目规划提供了指导。
内容概要:本文详细介绍了基于PLC(可编程逻辑控制器)的自动蜂窝煤生产线中五条传送带的控制系统设计。主要内容涵盖IO分配、梯形图程序编写、接线图原理图绘制以及组态画面的设计。通过合理的IO分配,确保各个输入输出点正确连接;利用梯形图程序实现传送带的启动、停止及联动控制;接线图确保电气连接的安全性和可靠性;组态画面提供人机交互界面,便于操作员远程监控和操作。此外,还分享了一些实际调试中的经验和教训,如传感器安装位置、硬件接线注意事项等。 适合人群:从事自动化控制领域的工程师和技术人员,尤其是对PLC编程和工业自动化感兴趣的读者。 使用场景及目标:适用于需要设计和实施自动化生产线的企业和个人。目标是提高生产线的自动化程度,减少人工干预,提升生产效率和产品质量。 其他说明:文中提到的具体实例和代码片段有助于读者更好地理解和掌握相关技术和方法。同时,强调了硬件和软件相结合的重要性,提供了实用的调试技巧和经验总结。
内容概要:本文详细介绍了OpenScenario场景仿真的结构及其应用,特别是通过具体的XML代码片段解释了各个参数的作用和配置方法。文中提到的思维导图帮助理解复杂的参数关系,如Storyboard、Act、ManeuverGroup等层级结构,以及它们之间的相互作用。同时,文章提供了多个实用案例,如跟车急刹再加速、变道场景等,展示了如何利用这些参数创建逼真的驾驶场景。此外,还特别强调了一些常见的错误和解决方法,如条件触发器的误用、坐标系转换等问题。 适用人群:从事自动驾驶仿真研究的技术人员,尤其是对OpenScenario标准有一定了解并希望深入掌握其应用场景的人。 使用场景及目标:适用于需要精确控制交通参与者行为的自动驾驶仿真项目,旨在提高开发者对OpenScenario的理解和运用能力,减少开发过程中常见错误的发生。 其他说明:文章不仅提供了理论指导,还包括大量实践经验分享,如调试技巧、参数优化等,有助于快速解决问题并提升工作效率。
内容概要:本文详细介绍了30kW、1000rpm、线电压380V的自启动永磁同步电机的6极72槽设计方案及其性能优化过程。首先,通过RMxprt进行快速建模,设定基本参数如电机类型、额定功率、速度、电压、极数和槽数等。接着,深入探讨了定子冲片材料选择、转子结构设计、绕组配置以及磁密波形分析等方面的技术细节。文中特别强调了双层绕组设计、短距跨距选择、磁密波形优化、反电势波形验证等关键技术手段的应用。此外,还讨论了启动转矩、效率曲线、温升控制等方面的优化措施。最终,通过一系列仿真和实测数据分析,展示了该设计方案在提高效率、降低谐波失真、优化启动性能等方面的显著成果。 适合人群:从事电机设计、电磁仿真、电力电子领域的工程师和技术人员。 使用场景及目标:适用于希望深入了解永磁同步电机设计原理及优化方法的专业人士,旨在为类似项目的开发提供参考和借鉴。 其他说明:文章不仅提供了详细的参数设置和代码示例,还分享了许多实践经验,如材料选择、仿真技巧、故障排除等,有助于读者更好地理解和应用相关技术。
内容概要:本文详细介绍了如何使用S7-1200 PLC和WinCC搭建一个完整的燃油锅炉自动控制系统。首先明确了系统的IO分配,包括数字量输入输出和模拟量输入输出的具体连接方式。接着深入讲解了梯形图编程的关键逻辑,如鼓风机和燃油泵的联锁控制、温度PID调节等。对于接线部分,强调了强电弱电线缆分离以及使用屏蔽线的重要性。WinCC组态方面,则着重于创建直观的操作界面和有效的报警管理。此外,还分享了一些调试技巧和常见问题的解决方案。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC编程和SCADA系统有一定了解的人群。 使用场景及目标:适用于需要构建高效稳定的燃油锅炉控制系统的工业环境,旨在提高系统的可靠性和安全性,降低故障率并提升工作效率。 其他说明:文中提供了丰富的实践经验,包括具体的硬件选型、详细的程序代码片段以及实用的故障排查方法,有助于读者快速掌握相关技能并在实际工作中应用。
内容概要:本文详细探讨了逆变器输出纹波电流的来源及其对系统稳定性的影响,并提出了一种基于变开关频率PWM控制策略的解决方案。文中首先分析了纹波电流产生的原因,包括开关元件的导通关断、电感电流的非理想特性和电源电压波动。接着介绍了变开关频率PWM控制的基本原理,通过实时调整开关频率来优化纹波电流和开关损耗之间的平衡。随后,利用傅里叶变换建立了纹波电流预测模型,并通过Simulink仿真模型进行了验证。仿真结果显示,变开关频率控制能够显著减小纹波电流的幅值,提高系统的稳定性和效率。此外,文章还提供了具体的MATLAB/Simulink建模步骤以及一些优化建议,如提高开关频率上限、采用低纹波PWM算法和增加电感电流反馈。 适合人群:从事电力电子系统设计和优化的研究人员和技术人员,尤其是关注逆变器性能提升的专业人士。 使用场景及目标:适用于需要优化逆变器输出质量、提高系统稳定性和效率的应用场合。目标是通过变开关频率PWM控制策略,解决传统固定开关频率控制中存在的纹波电流大、效率低等问题。 其他说明:文章不仅提供了理论分析,还包括详细的仿真建模指导和优化建议,有助于读者更好地理解和应用相关技术。同时,文中提到的一些实用技巧和注意事项对于实际工程应用具有重要参考价值。
内容概要:本文详细介绍了平衡树的基本概念、发展历程、不同类型(如AVL树、红黑树、2-3树)的特点和操作原理。文中解释了平衡树如何通过自平衡机制克服普通二叉搜索树在极端情况下的性能瓶颈,确保高效的数据存储和检索。此外,还探讨了平衡树在数据库索引和搜索引擎等实际应用中的重要作用,并对其优缺点进行了全面分析。 适合人群:计算机科学专业学生、软件工程师、算法爱好者等对数据结构有兴趣的人群。 使用场景及目标:帮助读者理解平衡树的工作原理,掌握不同类型平衡树的特点和操作方法,提高在实际项目中选择和应用适当数据结构的能力。 其他说明:本文不仅涵盖了理论知识,还包括具体的应用案例和技术细节,旨在为读者提供全面的学习资料。
计算机三级网络技术 机试100题和答案.pdf
内容概要:本文详细介绍了将YOLOv5模型集成到LabVIEW环境中进行目标检测的方法。作者通过C++封装了一个基于ONNX Runtime的DLL,实现了YOLOv5模型的高效推理,并支持多模型并行处理。文中涵盖了从模型初始化、视频流处理、内存管理和模型热替换等多个方面的具体实现细节和技术要点。此外,还提供了性能测试数据以及实际应用场景的经验分享。 适合人群:熟悉LabVIEW编程,有一定C++基础,从事工业自动化或计算机视觉相关领域的工程师和技术人员。 使用场景及目标:适用于需要在LabVIEW环境下进行高效目标检测的应用场景,如工业质检、安防监控等。主要目标是提高目标检测的速度和准确性,降低开发难度,提升系统的灵活性和扩展性。 其他说明:文中提到的技术方案已在实际项目中得到验证,能够稳定运行于7x24小时的工作环境。GitHub上有完整的开源代码可供参考。
逻辑回归ex2-logistic-regression-ex2data1
内容概要:本文详细介绍了使用MATLAB/Simulink搭建单相高功率因数整流器仿真的全过程。作者通过单周期控制(OCC)方法,使电感电流平均值跟随电压波形,从而提高功率因数。文中涵盖了控制算法的设计、主电路参数的选择、波形采集与分析以及常见问题的解决方案。特别是在控制算法方面,通过动态调整占空比,确保系统的稳定性,并通过实验验证了THD低于5%,功率因数达到0.98以上的优异性能。 适合人群:电力电子工程师、科研人员、高校师生等对高功率因数整流器仿真感兴趣的读者。 使用场景及目标:适用于研究和开发高效电源转换设备的技术人员,旨在通过仿真手段优化整流器性能,降低谐波失真,提高功率因数。 其他说明:文章提供了详细的代码片段和调试经验,帮助读者更好地理解和应用单周期控制技术。同时提醒读者注意仿真与实际硬件之间的差异,强调理论计算与实际调试相结合的重要性。
计算机设备采购合同.pdf
计算机三级网络技术考试资料大全.pdf
内容概要:本文详细介绍了如何在Simulink中构建质子交换膜燃料电池(PEMFC)和固体氧化物燃料电池(SOFC)的仿真模型及其控制策略。主要内容涵盖各子系统的建模方法,如气体流道、温度、电压、膜水合度等模块的具体实现细节;探讨了几种先进的控制算法,包括模糊PID、自抗扰控制(ADRC)、RBF神经网络PID以及它们的应用场景和优势;并通过具体案例展示了不同控制器在处理复杂工况时的表现差异。此外,文中还分享了一些实用技巧,如避免模型参数调校中的常见错误、提高仿真的稳定性和准确性。 适合人群:从事燃料电池研究与开发的专业人士,尤其是具有一定Matlab/Simulink基础的研究人员和技术工程师。 使用场景及目标:帮助读者掌握燃料电池系统建模的基本流程和技术要点,理解各种控制算法的特点及其应用场景,从而能够独立完成相关项目的开发与优化工作。 其他说明:文章提供了大量MATLAB代码片段作为实例支持,便于读者理解和实践。同时强调了理论联系实际的重要性,在介绍每种技术时均结合具体的实验数据进行分析讨论。