栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

ActiveJ框架学习---起步

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ActiveJ框架学习---起步

2021SC@SDUSC

前言

作为本次软件工程创新与实践的课题项目,ActiveJ的代码分析与研究就从这篇博文开始。

首先是自己向自己提出问题,什么是ActiveJ?

引用ActiveJ网站的介绍:
"-----Created from the ground up as an alternative Spring/ Micronauts/ Netty/ Jetty"
ActiveJ在自己的摘要中着重指出其是Spring,netty等现有服务器框架的优秀替换者,定义为一个全新的、轻量的、无大量抽象和第三方依赖的后端框架。

以我的角度来看ActiveJ的描述,结合自己对于Springboot的使用,ActiveJ被描述为一个全功能的服务器,不仅仅是最初创造时对于AdKernel大规模数据的处理,也可以处理一般的HTTP和I/O请求。从官网上给的HTTP请求简单案例来看,是和Tomcat的示例一样的,在认识和学习过程中可以以稍微熟悉的Tomcat来分析ActiveJ的功能。

作为一个全新的优秀框架,ActiveJ特别地在网站上罗列了在Webframe上的一系列测评,来展现ActiveJ的优越性,这里引用一个launch time案例:

ActiveJ与Spring的web应用启动时间对比

通过GitHub一个maven案例:

mvn archetype:generate -DarchetypeGroupId=io.activej -DarchetypeArtifactId=archetype-http -DarchetypeVersion=5.0-rc3

其会在本地创建一个my-web-app项目来:

public class WebApp extends HttpServerLauncher {

    @Provides
    AsyncServlet servlet() {
        return request -> Promise.of(
                HttpResponse.ok200()
                    .withPlainText("Hello, World!"));
    }

    public static void main(String[] args) throws Exception {
        Launcher launcher = new WebApp();
        launcher.launch(args);
    }
}

AsycServlet servlet()显示出了ActiveJ在使用异步I/O技术来处理并发、大量的HTTP请求。作为ActiveJ的起步,便从这几行中出发去认识和学习ActiveJ这个雄心勃勃的全新服务器框架吧。

结构分析

ActiveJ共有八个组成部分:

Async-I/O                           
————异步I/O处理 ,包含Promise,Eventloop,Net
HTTP                                
————高效的异步HTTP服务,并且可以作为独立的组件使用
Inject                               
————提供强大工具的微依赖注解库
Serializer                         
————基于运行时字节码生成的世界最快JVM串行器
Codegen                          
————排除复杂的直接字节操作的动态字节生成器 
Specializer                      
————由JVM优化而加速代码构建的ActiveJ技术
FS                                    
————远程文件操作的有力工具
RPC                                 
————在分布式应用和微处理领域的轻量而快速的二进制协议

这8个组成部分共同构成了ActiveJ能够大规模处理数据、提供优秀的后端应用服务的原因。

基于Gitee上源代码来分析,严格的在源代码中确立分工是有些困难的,因为作为一个整体的框架来看,ActiveJ的很多功能都要基于其它部分提供的支持,因此在小组合作时根据这8个功能进行整体分工,而在具体的分析上需要成员们相互帮助来获得更全面的知识。       

本系列博客将围绕Codegen和Specializer两部分展开。

小队其他成员分工情况:

Async-I/O和HTTP部分---Mar3
Inject和Serializer部分----zth_idea
FS和RPC部分----LeapFrogFe

源码拉取和分析

项目源码从gitee(https://gitee.com/mirrors/ActiveJ)或者GitHub(https://github.com/activej/activej)均可下载,下载完成后使用集成开发工具IDEA直接打开即可,初次打开项目时IDEA会自动从Maven中央仓库里下载项目的依赖,完成后结构如下:

其中源码里标亮的/example以及之后的util部分属于公共代码,个人判断不属于核心代码分析,因此分析集中于/core部分的代码,但每人负责的部分互相亦有渗透,之后分析范围会逐渐确定。

依赖下载完成后还需要在IDEA里等待更新项目所需要的index,过程也是由IDEA自动完成。

源码的结构和SpringBoot文件夹的结构大致相同,
项目整体的概述在根目录下的README.md文件下,和官网和GitHub上是一致的,并无太多参考价值,整体Maven依赖在根目录下的pom.xml里。但是在子项目里(比如/core-specializer),也给出了子项目所需要的具体依赖,记录在子项目中的pom.xml里。 

而在具体的项目里(比如我负责的Codegen):

在src/main/java/io.activej目录下是子项目codegen的对外代码,即会被外部访问的功能,分析这些java文件是本次课程的核心内容,需要在这里面查看activej所提供的功能是什么,递归的查看其引用的定义和依赖。

而src/test是开发者在开发过程中内部进行测试的包,其一般都是测试单个或局部的功能,以实现计划的需求分析或者是开发时提出的新需求。这些代码相比于/main中在结构上会有些简单,可以通过@test来测试,但是依旧是分析功能时所可以参考的来源。

在子项目里还有自己的pom.xml和README.md

Codegen的pom.xml

但是这里的README.md文件只是将我们引到官网中的ActiveJ-Codege(https://activej.io/codegen)上去,并没有什么额外的内容。

综述结语

首先是从ActiveJ的源码结构上来看,相比于自己在前两年里写的项目结构组织,确实是显得很专业和严谨。分析源码,对我来说也是学习软件项目如何更专业的起步的过程,构建出一个漂亮的,悦目而整洁的项目结构亦是一个成功的软件项目的一部分。

Spring由于其体量庞大,在快速构建自定义项目时被人所诟病,而ActiveJ以极其自信的态度来提出要作为最快、最方便的后端服务器框架,在读ActiveJ官网时着实被其所震惊。对于用SpringBoot搭建过上学期数据库课设的我来说,对于ActiveJ的这种说法抱有很大的好奇和探索心理。并且目前无论是国内的搜索,还是国外Google里的搜索,关于ActiveJ的相关搜索,除了官网以外均没有其他的内容,或许这个全新的ActiveJ的时代就在未来吧。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/281591.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号