首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

什么要学Spring

我想你已经眼花缭乱了,从这么多框架,如何才能挑选出你心仪框架呢?...对我们而言,永远没有“最好”框架,只有最适合自己需求框架。考虑一个框架时,你需要考虑问题通常有这么几个: 我使用语言和平台支持这个框架? 这个框架和其他我正在使用框架兼容性怎么样?...学习这个框架学习曲线是否太陡? 它开发效率如何? 安全性如何? 方便进行单元测试? 这个框架文档支持怎么样?社区够活跃?...事务管理:Spring强大事务管理功能,能够处理本地事务(一个数据库)或是全局事务(多个数据,采用JTA)。 模块分离:Spring框架是由模块构成。...单元测试:Spring写出来代码非常容易做单元测试,可以采用依赖注射(Dependency Injection)将测试数据注射到程序

1.8K20

聊一聊:Service层你觉得有用

前段日子社群(点击加入)里看到有人讨论关于Service层接口问题,DD也经常碰到周围新人有问过一些类似的问题:一定要写个Service层接口?Service层接口到底用做什么呢?...好像都没什么用啊? DD看法是: Service层在业务逻辑不复杂时候,似乎是没有什么用,但是随着应用迭代,业务逻辑变得复杂了之后,这一层是非常有。...主要表现在这几个方面: 1、更适合用来处理复杂业务逻辑,可能会涉及多张表操作,甚至还混杂着消息投递、接口调用等一系列复杂综合性事务,这也是我们常说事务管理所处层次。...3、对单元测试支持,通过单独一层service实现业务逻辑,那么对于业务逻辑单元测试会更容易编写,只需要对service来编写就可以了;而web层单元测试就不需要关注业务本身,只需要关注反馈格式就行了...往期推荐 聊一聊:你平时写不写单元测试? 聊一聊:下班后消息,要不要回? 聊一聊:你都用什么方式回忆青春呢? 聊一聊:MyBatis和Spring Data JPA选择问题

33930
您找到你想要的搜索结果了吗?
是的
没有找到

程序员优秀之路:一起来看下这 97 位”砖家“能给出啥编程建议?(2)

认知编程概念,走向优秀~ 传送门:《程序员优秀之路:认知 97 个编程概念(1)》 区分异常 程序运行时出现异常通常可以归为:技术异常和业务异常,区分二者有利于我们更好捕获它们。...不相信这种假设,问清楚:“什么时候”什么条件下”发生“什么事”,而不是“如果”。...别动生产线 大多数基于 Web 开发环境,架构可以这样分解: 开发者机器上进行本地开发和单元测试; 完成手动或自动集成测试开发服务器; QA 团队和用户在其中进行验收测试临时服务器; 生产服务器...克苏鲁神话 开发过程,我们偶尔会被同事这样提问: “我这里这里报这个错,你知道是为什么?” 搞笑是:提出问题的人通常比被问问题的人更有能力作出解答。...这些不必要代码会基于什么理由产生: 有人认为将来可能用到它; 有人觉得写了有趣,但不一定有用; 实现起来更容易,比如引入了一个很大库,但只用其中一小点; 开发理解了额外需求,实际不存在; 删了只会让你代码更清晰

31220

你见过最垃圾代码长什么样?(来长长见识)

唤醒内在孩子 到底谁在读提交t信息 如果这些变化任何一个 购买超宽屏显示器理由 天才之举 排版是最好 如果它起作用,它就是起作用 确保它是真正Bool 测试驱动最佳开发方式 你敢于扩展...某些时候,它发生在我们所有人身上。你产生了你并不感到自豪代码。这些代码让你怀疑,"我怎么会写出这样东西?"这没什么羞愧。我们只是人类。有时候,我们就是没有做到最好。...它可以一夜之间改变。为了防止这种情况发生,最好还是多加小心。 购买超宽屏显示器理由 冗长变量名并无不妥。只要它们有助于提高代码可读性。但有时,我们必须问自己 "多长才算长?”...测试驱动最佳开发方式 我们必须为使用单元测试做法点赞。但我不禁要问。如果测试是生成随机数字,会发生什么? 你敢于扩展? 我们都在某些时候写过复杂开关语句。然而,一千行似乎有点太多了。...或者如果你有一些可耻照片要分享,不要害怕评论中分享它。 我浏览这些代码片断时感到很愉快。它让我想起了我早期日子。职业生涯,我写了一些我并不自豪代码片段。

35710

阿里编程规范 pdf_阿里前端开发规范

捕获异常是为了处理它,不要捕获了却什么都不处理而抛弃之,如果不想处理它,请将该异常抛给它调用者。最外层业务使用者,必须处理异常,将其转化为用户可以理解内容。...有 try 块放到了事务代码,catch 异常后,如果需要回滚事务,一定要注意手动回滚事务。...说明:关于 RPC 方法返回方式使用 Result 方式理由: 1)使用抛异常返回方式,调用方如果没有捕获到就会产生运行时错误。...记录日志时请思考:这些日志真的有人看?看到这条日志你能做什么?能不能给问题排查带来好处? 10、单元测试 单元测试必须遵守 AIR 原则。...测试框架通常是定期执行,执行过程必须完全自动化才有意义。输出结果需要人工检查测试不是一个单元测试

1.2K10

聊聊spring事务异常场景下发生不按套路出牌事儿

看到这个答案,可能有些朋友会一脸懵逼,为啥上个例子把异常捕获了,数据可以插入成功,这次也是同样把异常捕获,数据却无法插入成功 原因: 这就得从spring事务传播行为说起了,spring事务默认传播行为是...按照REQUIRED这个八股文含义是如果当前存在事务,则加入该事务,如果当前不存在事务,则创建一个新事务 示例 @Transactional public void saveTxTestC...,saveTxTestA还能插入,有没有什么解决方法 答案: saveTxTestC加上如下注解 @Transactional(propagation = Propagation.REQUIRES_NEW...如果一个事务已经存在,则先将这个存在事务挂起 场景二:接着上一场景延伸 示例:方法上加了Propagation.REQUIRES_NEW注解 @Autowired private JdbcTemplate...捕获一下saveTxTestD抛出来异常 再次运行单元测试,得到如下结果 [在这里插入图片描述] 总结 我们平时可能会为了面试背了一些八股文,但实际场景可能会远比这些八股文复杂多,因此我们在看这些八股文时

51430

聊聊spring事务异常场景下发生不按套路出牌事儿

,可能有些朋友会一脸懵逼,为啥上个例子把异常捕获了,数据可以插入成功,这次也是同样把异常捕获,数据却无法插入成功 原因: 这就得从spring事务传播行为说起了,spring事务默认传播行为是REQUIRED...按照REQUIRED这个八股文含义是如果当前存在事务,则加入该事务,如果当前不存在事务,则创建一个新事务 示例 @Transactional public void saveTxTestC...,saveTxTestA还能插入,有没有什么解决方法 答案: saveTxTestC加上如下注解 @Transactional(propagation = Propagation.REQUIRES_NEW...如果一个事务已经存在,则先将这个存在事务挂起 场景二:接着上一场景延伸 01 示例:方法上加了Propagation.REQUIRES_NEW注解 @Autowired private JdbcTemplate...捕获一下saveTxTestD抛出来异常 再次运行单元测试,得到如下结果 04 总结 我们平时可能会为了面试背了一些八股文,但实际场景可能会远比这些八股文复杂多,因此我们在看这些八股文时,可以多加思考

34210

模糊断言

虽然经常有很好理由”来解释为什么我们不能写简单断言,但是当你尝试了很多方式,可能会重新承认标准是一个非常主意。简单断言有时候并不能满足所有的测试需求。...让我们看一下伪代码编写一个单元测试测试用例: // 这是伪代码 test('add new user to db' { user = createUser('John', 'Smith')...(未显示))都不会影响我们测试 但是 在上面的示例,暗示可能为用户提供了id以及创建时间戳。...结论 断言中使用模糊匹配是一个技巧,但是当没有其他方法可用时,它必须是最后选择。...更精确字段匹配可以消除对模糊性需求。 ---- 郑重声明:文章禁止第三方(腾讯云除外)转载、发表,事情原委测试窝,首页抄我七篇原创还拉黑,你们良心不会痛

1.1K10

究竟怎样写代码才算是代码

当然,代码就是设计(Jack W.Reeves, 1992);代码是最有价值交付物。我们需要好代码?在给“代码”下个定义之前,这个问题无法回答。那么,究竟什么代码?...那么接下来我们深入介绍下,什么代码标准呢,请看下面解释: 一、代码命名规范: 1、 package包名全部由小写ASCII字母组成,用“.”分隔。...以上几条如果符合就算是代码了吗?当然不是,这只是代码中最基本命名规范而已,就算不符合最多就是代码不好看,没什么其他影响。...6、 事务处理 事务范围是否合理;或者说,是否把不必要操作放到了同一个事务 事务传播方式是否合理(required,never,new等配置) 7、sql语句 sql语句是否正确 使用mybatis...四、性能瓶颈 真实工作,很多程序员其实在开发完程序后不去真正关注程序性能和响应时间到底如何,凭是以往开发经验开发过程尽可能去减少问题点。

44230

如何写出让人抓狂代码?

此外,还有些技术书中说过:代码,不用写注释,因为代码即注释。这也给那些不喜欢写代码注释的人,找了一个合理理由。 但我个人觉得,国内每个程序员英文水平都不一样,思维方式和编码习惯也有很大区别。...方法代码块才真正需要事务,其余方法,可以非事务执行,这样就能缩小事务范围,避免大事务。...具体用法我就不展开了,有兴趣朋友可以看看我另一篇文章《聊聊接口性能优化11个小技巧》 12.频繁捕获异常 通常情况下,为了程序抛出异常时,任然能够继续运行,不至于中断整个程序,我们可以选择手动捕获异常...(user); } 其中User对象是我们已经定义对象,就不会存在什么歧义了。...我见过有些编程高手是测试驱动开发,他们会先把单元测试写好,再写具体业务逻辑。 那么,我们为什么要写单元测试呢? 我们写代码大多数是可维护代码,很有可能在未来某一天需要被重构。

29710

在线求CR,你觉得我这段Java代码还有优化空间

那么,这是怎样一段代码呢?涉及到哪些知识,又有哪些可以优化点呢? 让我们来看一下。 背景 先说一下背景,也就是要知道我们单元测试要测这个方法具体是什么功能。...插入AssetStream方法,主要是插入一条AssetStream流水信息,为了防止并发,这里在数据库增加了唯一性约束。 为了保证数据一致性,我们通过本地事务将这两个操作包在同一个事务。...Assert 这个相信大家都比较熟悉,这就是JUnit中提供断言工具类,单元测试时可以用做断言。这就不详细介绍了。 优化点 以上代码涉及到了很多知识点,但是,难道就没有什么优化点了吗?...这个问题其实我发朋友圈之前就有想到过,心中早已经有了答案,只不过有多位朋友能够几乎同时提到这一点还是很不错。 我们来说说问题是什么。...但是还是想问一下,对于这部分代码,你觉得还有什么可以优化地方

82030

一种基于沙箱动态测试设想

说到全流程测试,就不得不提很多人关心单元测试」,而说到单元测试,我又自然想到了我浏览器中长期占据一个 tab 页文章《为什么大多数单元测试是浪费》(后台回复「浪费」获取 URL 地址)。...为什么长期占据我浏览器一个 tab 页?主要是我作为实用派,一直对单元测试投入产出比存在疑问,但是自己又没有实际做过单元测试,所以很想知道别人反驳理由,顺便结合自己项目,做个取舍。...但是这两种方法都有一个共同缺点,就是很难发现一些动态执行过程问题,比如内存泄露,就是很难确认分配内存和释放内存匹配操作。那有没有解决方案呢?...,就是通过检测病毒/木马干了啥来判断是否恶意,而判断木马干了啥,一种方式是等木马干活时抓现行(滞后、被动),另一种则是把木马丢到沙箱里面主动运行起来,这是目前一种非常有识别手段。...以上,我费劲从敏捷测试引到了沙箱动态检测,不知道你看明白了没有?目前,这个方法还只是个猜想,如果大家有其他方式,请多赐教,如果针对上面的方案有任何问题和建议,欢迎留言一起讨论。

70930

java事务回滚案例_java事务控制

大家,又见面了,我是你们朋友全栈君。...2. try…catch异常 一段业务逻辑对数据库异常进行了处理,使用了try…catch子句捕获异常并throw了一个自定义异常,这种情况导致了事务未回滚,示例代码如下: @Transactional...代码我虽然捕获了异常,但是同时我也抛出了异常,为什么事务未回滚呢?猜测是异常类型不对,于是开始查询原因,翻看了Spring官方文档,找到了答案。下面是翻译自Spring官网。...17.5.3 声明式事务回滚 上一节中介绍了如何设置开启Spring事务,一般在你应用Service层代码设置,这一节将介绍简单流行声明式事务如何控制事务回滚。...Spring FrameWork 事务框架推荐事务回滚方法是,在当前执行事务上下文中抛出一个异常。

1.6K10

小程序风口之下商家该如何推广拉新?

其实这都有现成方法直接使用。而且相当简单高效! 虽然简单,但是我们还是先要思考清楚底层逻辑。只学到表面方法,不理解透原理是很容易变化失去本来该有的效果。...1、推广拉新前,先想清楚客户为什么来你店? 不就是因为要买东西/订单服务?这是客户真实需求。那为什么选择你,不选择别的商家?所以要给出一个充分理由,才是客户决策根源。...[节日.jpg] 节假日里人们购买欲望会更强烈。 有这么方便好用工具后,首先找最容易达成合作。如:自己员工、亲朋好友(全员营销)。接着就是附近商家(业联盟合作)。...[酒店预订完成.jpg] 不仅如此,连接WiFi时候。还有WiFi红包!这才是是让客户下次再来最强大理由。...如果上面三个问题,脑海有了清晰轮廓。那么你应该明白了推广拉新不能单独处理。推广拉新前要准备什么,推广拉新后面该干什么。从而达到成交率提升、客源持续增长、老客户不断沉淀。

74831

醉袖迎风受落花——代码10条认知

每个软件工程师都希望看到代码,从代码中学习,并进一步写出好代码。然而,“横看成岭侧成峰”,每个人对代码理解可能不尽相同,代码是每个人心中那个不同哈姆雷特? ?...4.云解有情花解语——自我解释 尽管注释和外部文档非常有用,但它们不是编写良好自我解释代码替代品。代码本身就是最好说明文档,无需解释就能让别人明白,每一行代码都应该是这样。...但是,代码自解释不是不写注释理由,即使变量、方法、类、函数、模块名称是自解释,但这些并不能描述出代码全貌。 ? 5. 清池不测通沧海——可测性 只要编写了代码,就可以测试代码。...每次执行代码并检查其效果时,都在测试它,但这不应该是测试代码唯一方法。单元测试代码一部分,单元测试常常记录了代码意图。...单元测试用例能成功运行前提是该方法内部所有逻辑必须是能正常运行,编写可测试代码使其具有了可塑性。 ? 6.伐竹为桥结构同——可被重构 重构是不改变行为情况下改变实现。

37110

100%代码覆盖率悲剧

以下为译文: 有趣是,我对测试观点正在发生变化。十五年来,我一直推广TDD(测试驱动开发,过去也被称为测试优先方式),或至少对于开发者来说,写一些单元测试。...“,那我们试想来了个无知开发者,试图更改这些简单代码,如果相关单元测试发生了变化,他会做什么,他只会删除它。“ “但是如果你非要写测试怎么办呢?”...悲剧是,不用使用正确工具,因为没有什么理由,我们决定不要用错误工具。 悲剧是,一旦“所谓做法”成为公司开发主流,我们似乎就会忘了这种做法应用场景,它优点是什么,使用它代价是什么。...那么100%代码覆盖率是值得追求? 是的,每个人都应该在一个项目中实现。我认为你必须极端地去了解这么做带来痛苦是什么。...单元测试(特别是第一种方法)是一个非常做法,但我们应该分辨哪些测试是有用,哪些是适得其反。 但记住没有什么工具使用起来是毫无代价,没有工具是万能,使用前请停下来想一想。

906100

Intellij IDEA常用牛逼插件总结

Free Mybatis plugin 推荐指数:☆☆☆☆☆ 推荐理由sqlxml里也能智能提示了!...ide中直接翻译,不需要跳转到网页了,效率神器! 6、打字效果 Power Mode II 装逼指数:☆☆☆☆☆ 推荐理由:这个就是美化,装逼用。喜欢可以试试,让编码不再单调。...留下重力碎屑就好了 7、快捷跳转Action方法 RestfulToolkit 推荐指数:☆☆☆☆☆ 推荐理由:spring开发中经常有根据浏览器url找对应action方法需求,这个可以快捷根据...自动识别pojo字段注释,并添加为sql注释。 11、控制台日志 高亮 Grep Console 推荐指数:☆☆☆☆☆ 推荐理由:没什么好说, 基本是必备!...12、反编译插件 IdeaJad 推荐指数:☆☆☆☆☆ 推荐理由:没什么好说, 基本是必备!

1.4K20

Spring+SpringMVC+MyBatis+easyUI整合优化篇(三)代码测试

前言 看到标题你可能会问为什么这一篇会谈到代码测试,不是说代码优化么?前两篇主要是讲了程序输出及Log4j使用,Log能够帮助我们进行bug定位,优化开发流程,而代码测试有什么用呢?...你愿意进行单元测试? 其实,像第一篇文章所说,对于打印输出信息,我们更习惯于使用System.out命令,所以很多时候,习惯决定了我们编码方式,那么你习惯于做单元测试?...业务逻辑比较简单不值得编写单元测试。 这又是一个理由,而这个理由深层次原因,应该是来源于对自己自信,自信是件好事,但是要掌握其中度。...开发,对于自己开发模块,只有通过单元测试之后,才能提交到SVN库或者Git 库。 再一次强调,你不是一个人,你代码有问题,同事pull下来代码也是有问题,浪费大家时间。...对于这件事情,我是深有感触去年一次项目开发过程,由于我没有做好代码审查和单元测试匆匆上传到代码库,导致其他开发人员也无法正常开展工作,还要帮着我去修改bug,这件事导致我有些自责,也在后续开发工作更认真

591100

怎样处理InterruptedException

它做了什么什么都没做,只是无止境消耗 CPU。我们能终止它 Java 是不行。只有当你按下 Ctrl-C 来终止整个 JVM 时这段程序才会停止。... Java 没有方式来终止一个线程,除非该线程自动退出。请务必牢记这一原则,其它东西就显而易见了。 我们将这个死循环放在一个线程里: ? 所以,怎样才能停止一个需要停止线程?...例如,Thread.sleep() 方法设计(一种最基本方法): ? 为什么要这么做?为什么不能等待并且不用去检查标识变量?我相信一定有一个非常理由。...理由如下(如果我说错了,请修正我错误):为了让代码变快或是中断准备,没有其他理由。 如果你代码足够快,你从来不会检测中断标识变量,因为你不想处理任何中断。...知道我想要说什么?不要丢失 InterruptedException,这一点非常重要。我们不能吞噬该异常并继续运行。这严重违背了 Java 多线程原则。

3.2K30
领券