Springboot挺好的,为什么要用Mars-Java

贝克街的天才 发布于 06/01 22:49
阅读 2K+
收藏 3

这是一个大部分程序员都会产生的疑问,或者说质疑吧,Springboot那么好用,生态那么全,为什么要用这个刚出道的Mars-Java呢?

这篇文章就来聊一聊Mars-Java的一些特性。

首先如果要把这两个框架放在一起比较,那么毫无疑问,Springboot从技术和生态以及安全性上是碾压性的,但是如果抛开这些不谈呢?

你们一定觉得我在讲笑话,抛开技术,生态,安全性不谈,那这个框架还有啥用?连基本的都没了。 其实非也。

我们可以一个一个来讲。

技术比较

Springboot是基于Spring的二次封装,目的在于减少配置,而Spring是一群大神,花了好几年的时间维护过来的,并且经历了这么多年的实战运用,所以可谓是身经百战,经验丰富的一个框架了,他的算法和性能应该是得到了极致的优化(我猜的,其实没研究过源码)

而Mars-Java作为一个新兴的框架,自然在这两点上是处于下风的,但是我们都是用java实现的,用的是同一种技术:

  • Spring的MVC是基于servlet做得请求拦截,分发,并通过反射执行后面的java类,Mars-Java也是一样的原理
  • Spring的AOP是基于动态代理做的,Mars-Java也是一样的
  • Spring的IOC是通过反射被属性赋值,Mars-Java也一样
  • Spring有自己的JDBCTemplate,Mars-Java也有,而且功能比他更丰富

所以,我说的技术不如Spring,指的就是经验的差距,而这个可以通过时间来弥补,他缺的只是历练。

生态比较

这个就完全无法比了,一个团队花几年做得,跟Mars-Java这个新兴比,数量上就已经碾压了,更不用提什么成熟度了。

但是,Mars-Java有自己的分布式组件Mars-Cloud,以及正在开发的Mars-Config,后面也会一步步的优化和新增组件

同样,这个也是可以通过时间来弥补的。

安全性比较

虽然我在每次定版本之前,都会用一个专门的测试项目来测试所有的功能,确保不会出bug,但是毕竟缺乏大量的实战经验,所以这一点确实比不上Spring

这个问题,我正在进行单测的补充,确保覆盖率达到可交付标准


也就是说,Mars-Java目前就像一个实习生一样,很稚嫩,但是却有无限的可能,要是大家都来支持,一起完善,贡献代码,说不定会成为另一个生态。有竞争才有进步,老是被Spring垄断 就不好玩了。

说完了对比,接下来说一说Mars-Java的优点

一、 轻巧,简洁

这个点,几乎所有的开源项目都会声明一下,好像成了吹牛的标配,但是Mars-Java是真的简洁,我们平时开发一个中小型项目,如果用SpringBoot+Mybatis来做,会引入大量的Jar包,而Mars-Java起码少了一半依赖。

并且Mars-Java只提取了Springboot里常用的功能点,对于不常用的就直接丢弃了,比如:

  • Spring的bean支持Scope,而Mars-Java就只保留了单例
  • Spring支持所有连接池,所以需要有专门的代码来做兼容性,而Mars-Java直接内置druid,摒弃其他连接池
  • Spring可以跟大部分持久层框架整合,而Mars-Java只支持自己的持久层封装,摒弃其他的持久层框架。

这么做的目的在于 提供开箱即用的体验,让使用者不需要去纠结该使用什么,就是引入maven坐标,开始写代码,不需要去考虑用什么组合。

还有一个就是Mars-Java打算走的路线是轻巧的封闭式生态,而不是兼容所有东西的开放性生态。 但是这并不等于违背开源精神,因为Mars-Java生态的所有的项目都是开源的,任何人都可以免费用,可以看源码,可以贡献。 并且如果有第三方愿意兼容Mars-Java,我们也是非常欢迎的

二、 上手快

几乎保留了Spring的玩法,只要你会Spring,或者Springboot就可以快速地上手使用他了,这么做,肯定有人会觉得没意义,跟Spring一样,为什么不用Spring呢?

原因就在于,Mars-Java的核心理念是抽取常用的,抛弃不常用的,所谓取其精华。

在这个基础上,再去看看有没有自己的新玩法添加进来。

除了跟Spring玩法相似,我们的文档还是中文的(因为我只会中文,哈哈哈),所以不需要去百度了,直接来Mars-Java官网查看原汁原味的官方文档。

三、 新玩法

声明式API

这个可能不是我首创,但是我觉得很有意义,比如后端要开发一个接口,只需要这样:

  1. 先声明一下
@MarsApi(refBean = "expApiService")
public interface ExpApi {

    /**
     * get请求示例
     * http://127.0.0.1:8080/expGetRequest?name=张三&names=王五&names=赵六
     * @param expVO
     * @return
     */
    List<ExpVO> expGetRequest(ExpVO expVO);
}

2. 实现这个接口就好

@MarsBean("expApiService")
public class ExpApiService implements ExpApi {

    /**
     * 为了让大家可以快速的跑起来,所以本示例没有连接数据库
     * 所以自然也就不会调用dao的方法了,这里注入进来的,只是为了演示IOC的用法
     */
    @MarsWrite
    private ExpDAO expDAO;

    /**
     * 这个方法上加了aop监听
     * @param expVO
     * @return
     */
    @Override
    @MarsAop(className = ExpAop.class)
    public List<ExpVO> expGetRequest(ExpVO expVO) {
        // 打印expDAO,如果不为null就说明已经注入了
        System.out.println(expDAO);

        // 打印接收到的参数,看是否接收成功
        System.out.println(expVO.getName());
        System.out.println(JSON.toJSONString(expVO.getNames()));

        // 返回数据
        return getExpResultData();
    }
}

对,你们没看错,Controller层没了,为什么会这样呢?这得从Controller的作用说起,在实际开发中,Controller基本上起到两个作用,一个是参数校验,一个是响应数据。

在Mars-Java中,参数校验被封装掉了,直接用注解即可,这个可以去官网看文档,响应数据,这个本来就没什么,直接返回就好,不需要去Controller里再返回一次了吧。

所以,干脆去掉了,让使用者专注在业务逻辑上。

其他新玩法

  • 一行注解解决分布式锁
  • 数据库单表操作不需要写sql
  • 自带分页组件,直接调用即可
  • 一个轻巧的,基于rest的分布式组件

如果有兴趣的话可以关注一下:

官网:http://mars-framework.com/

加载中
0
石头捡到布
石头捡到布

文档写得还不够!  

0
走着就散了
走着就散了

一个注解就够了,还要我写两个,要不要这么狠?

贝克街的天才
不需要一起使用,一个是类似于@restController ,一个是类似于 @Service。 在两个场景用
走着就散了
走着就散了
回复 @反派人物_Joker : @MarsApi(refBean = "expApiService")和@MarsBean("expApiService"),这两个注解要一起使用。我觉得麻烦
0
头号大宝贝
头号大宝贝

毫无亮点,烂大街的声明式API。

@RepositoryRestResource

 

贝克街的天才
回复 @头号大宝贝 : 1. 你连续说了两个冒犯的词:烂大街,自以为是。 请你回过去看一下我的回复,有没有说什么冒犯你的词。2. 什么叫无亮点是无意义?你从哪读出来的这个意思,语文不及格? 3. 不过我也习惯了,这就是评论区的风气,喜欢通过乱踩人 来获得满足感,体现出自己不一样的伟大思维。
头号大宝贝
头号大宝贝
回复 @反派人物_Joker : ???你在自以为是什么???无亮点是无意义???一个注解接口是新玩法???是JPA不支持还是Swagge不支持???
贝克街的天才
我可以开发出不一样的东西,但是意义在哪? 工具的意义在于节约开发时间,提高开发规范和质量。 这才是应该 坚守的方向。 弄个新玩法出来,然后呢? 底层还不是java,无非就是把 ABC 换成了 123嘛,有啥意义。 想要不一样 那就要彻底的不一样,自己弄个编译器出来才算。 所谓没亮点的东西其实很多:Android,windows,linux(如果免费算亮点,那就算有吧),微信,PC机
0
游方和尚
游方和尚

搞一个类似于springcloud的吧!

贝克街的天才
这个有,Mars-Cloud 就是类似于那个,不过子项目不多,只是实现了接口注册,发现,调用。属于一个发展中项目。
0
SpringBoot中文社区
贝克街的天才
吓得我以为 spring官方来鼓励我了。
勤奋的猫咪
哈哈,你这昵称!
0
海淀游民
海淀游民

没有决定性的优势没人愿意花时间去学个小众框架。

0
h
heiyee

我觉得新的东西应该是去解决别人没有提供的痛点,比如spring没有但是有需求的东西,如果只是照搬,然后说我优化了,那并没有啥意义,这种带着实验目的框架最终也只是帮你了解spring而已

0
网瘾少年徐志摩
贝克街的天才
经不起不礼貌的批评,谢谢。
0
xiaokek
xiaokek

求求你了 你要自己练手就自己练手 莫误导新手追求个性入你的坑

贝克街的天才
还有一点,麻烦你了解清楚再发言, 什么叫练手? 我维护一年多了,用心做出来的好吗? 官网都改了多少版了,项目都定了多少版本了,你不喜欢不要紧,我也不在意,但请你别乱喷,ok? 我不指望你们接受,但是保持起码的尊重可以吗?
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部