mars-java介绍
开发背景
做web后端的可能都知道spring,这也是唯一一个后端框架,无论市面上运用SSM还是SSH,万变不离其宗都离不开spring,spring已有多年历史,而mars-java才刚刚展露风采,但是spring也有自己的不足之处,而一个全新的东西,所有都是重新开始,有望成为全新的国内的后端开源框架。
JS框架有 react,vue,AngularJS,而后端框架只有spring,很多人说我是造轮子,但我不这么认为,所以…是时候挑战一下spring了,我希望每个人都能参与进来,贡献代码,让后端开发有更多的选择
我们的使命是,让写代码变成一件快乐的事。
不希望程序员在项目搭建上花费太多时间,又或者不断的重复一些套路。 虽然现在的版本还未达到我们的愿景,但是,我相信不会太远。
mars-java是什么
Mars-java是一个不需要容器的javaWeb开发框架,以netty作http服务管理,支持AOP,IOC,MVC,有自己的JDBCTemplete,并且集成了Mybatis作为持久层,除此之外还提供了Mars-config 来支撑远程配置,Mars-extends 来支持更多的功能以及工具类,框架持续迭代中,未来将更加强大。
能做什么
- 使用netty做的http服务
- 使用JWT做的会话管理
- 支持AOP,IOC,MVC,Mybatis,事务管理
- 通过 Mars-cloud 可以分布式部署
- 通过 Mars-config 可以远程配置【开发中】
缺点有哪些
- 只支持main方法启动,不可以打war包
- 只能给前端返回json,二进制流,不支持转发和重定向
- 目前刚刚起步,使用中还存在很多问题希望能够慢慢改进
注意事项:
- 项目只可以打jar包,不可以打war包,不然运行不了
- 不支持容器运行,只能打jar包后,通过命令运行jar包
- 需要jdk8 以上的版本
- 本项目的mysqljdbc驱动jar包,用的是8.x版本,如果要降级的话,可以将这个jar包排除,再引入你要的jdbc驱动jar就好了
- 数据源用的是阿里巴巴的Druid数据源
官方文档
官方源码
扩展包
支持redis连接
封装了 Email, MD5, AES 和 其他工具类 并 集成了hutool
生态
简单对比
名称 | AOP | IOC | MVC | 持久层 | configuration file | startup method |
---|---|---|---|---|---|---|
Mars-java | OK | OK | OK | 目前支持mybatis,有自己的JDBCTemplete | 只有一个,并只支持远程配置 | Main方法 |
Springboot | OK | OK | OK | 支持大部分主流框架 | 只有一个,并只支持远程配置 | Main方法,War包+Tomcat |
开发案例
创建简单的Maven项目
导入pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mars</groupId>
<artifactId>mars_java</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<!--main方法所在的类-->
<mainClass>com.mars.Start</mainClass>
<!-- 是否指定项目classpath下的依赖 -->
<addClasspath>true</addClasspath>
<!-- 指定依赖的时候声明前缀 -->
<classpathPrefix>./lib/</classpathPrefix>
<!--依赖是否使用带有时间戳的唯一版本号,如:xxx-1.3.0-20121225.012733.jar-->
<useUniqueVersions>false</useUniqueVersions>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.github.yuyenews</groupId>
<artifactId>mars-start-simple</artifactId>
<version>2.1.6</version>
</dependency>
</dependencies>
</project>
创建启动类
public class Start {
public static void main(String[] args) {
StartMars.start(Start.class);
}
}
创建启动类需要注意启动类的位置,不然会报错,启动服务的main方法所在的类,必须放在两层包名中,比如[com.mars,com.test]等,不允许放在[com,cn]等包中,更不允许放在包外面
创建Controller层
@Controller
public class TestController {
/**
* 方法的参数 可以是HttpRequest,HttpResponse以及自定义实体对象,顺序不限
*/
@MarsMapping(value = "test",method = RequestMetohd.GET)//指定接口名称以及请求方式
@MarsLog //用来打印接口请求日志
public String test(HttpRequest httpRequest, HttpResponse response,Object object){// Object为 自定义实体类名 参数名
System.out.println("httpRequest = " + httpRequest + ", response = " + response);
return "hello world";
}
}
然后启动测试访问:
http://域名/MarsMapping的value值
需要响应给前端的数据,直接在方法里返回即可,框架会自动转换成json格式 并响应
–作者:额滴神