[六字真言]3.呢.异常的谎言,你要相信多少次?

"嘛,呢",梵文意为“如意宝”,表示“宝部心”,又叫嘛呢宝,其实就是有"聚宝"的意思!

现在的社会现在的人,都是喜欢虚的假的,不喜欢真的诚的,谁虚伪谁高人一等,谁真诚谁傻瓜一个,这句话很现实的,会做的不如会说的.

这就是现实,真情可贵,用心陪醉,虚伪面对,从容领会,我就是永远都学不会

不知道最近心是怎么样了,周围发生了一些固有的定律,其实知道,只是不说!有的时候感觉大家都是聪明人,但是都在做不聪明的事情!

重复多次的"谎言"

有时开发的时候我们总不是单线条的去完成一些事情,会比较复杂.

如下情景:

定义了 2 个类 UserService 和 RoleService。其中 UserService 类中调用了 RolerService 类的代码,并且 UserService 类和 RoleService 类中都捕捉打印了异常.

代码如下

  1. public class UserService {
  2. //必须要使用这样的日志输出,不要使用system.out了
  3. private static Logger logger = LoggerFactory.getLogger(UserService.class);
  4. public void process(){
  5. try{
  6. //实例化 RoleService 类,可以换成其它注入等方式
  7. RoleService roleService = new RoleService();
  8. roleService.process();
  9. //other code might cause exception
  10. } catch(XXXException e){
  11. //如果 RoleService 类 process 方法抛出异常,异常会在 RoleService 类中被打印,在这里也会被打印,从而会打印 2 次
  12. logger.error(e);
  13. throw new RuntimeException(/* 错误代码 */ errorCode, /*异常信息*/msg, e);
  14. }
  15. }
  16. }
  17. public class RoleService{
  18. private static Logger logger = LoggerFactory.getLogger(RoleService.class);
  19. public void process(){
  20. try{
  21. //可能抛出异常的代码
  22. }
  23. catch(XXXException e){
  24. logger.error(e);
  25. throw new RuntimeException(/* 错误代码 */ errorCode, /*异常信息*/msg, e);
  26. }
  27. }
  28. }

"谎言"说一次就可以了,别把我们当成傻瓜!

同一段异常会被打印 2 次。如果层次再复杂一点,不去考虑打印日志消耗的系统性能,仅仅在异常日志中去定位异常具体的问题已经够头疼的了。

其实打印日志只需要在代码的最外层捕捉打印就可以了,异常打印也可以写成 AOP,织入到框架的最外层.

面试问题: 如果问道AOP的时候

  1. AOP的实现方式->Java的动态代理
  2. AOP的五种通知方式,并且要知道如何使用?
  3. AOP的你做过什么事情?日志的监控[登录日志/操作日志]

认清自己不容易

不管你再公司也好还是在生活中,都需要认清自己的定位

胖先生就是这样,有的时候对自己的定位不清楚,想要什么也不清楚!一直的浑浑噩噩吧!

一定记住,对于我们来说:出异常是最好的事情

异常不仅要能够让开发人员知道哪里出了问题,更多时候开发人员还需要知道是什么原因导致的问题,我们知道 java.lang.Exception 有字符串类型参数的构造方法,这个字符串可以自定义成通俗易懂的提示信息。

万能大法:java.lang.Exception

简单的自定义信息开发人员只能知道哪里出现了异常,但是很多的情况下,开发人员更需要知道是什么参数导致了这样的异常。这个时候我们就需要将方法调用的参数信息追加到自定义信息中。

下例只列举了一个参数的情况,多个参数的情况下,可以单独写一个工具类组织这样的字符串。

根据实际情况,来完成

  1. public void load(Long id){
  2. try{
  3. //..some code that throws SQLException
  4. }catch(SQLException ex){
  5. //将参数信息添加到异常信息中
  6. throw new RuntimeException(“Exception in load with Object Id :”+ id, ex);
  7. }
  8. }

与人方便自己方便

不可知的环境,请小心

如果你掌握了上面的技巧,那么算是入门了吧!慢慢来,路很长胖先生陪着你们走!虽然不知道能走多远.

  • 在写代码的过程中,由于对调用代码缺乏深层次的了解,不能准确判断是否调用的代码会产生异常[经验基础的积累],因而忽略处理。
  • 在产生了 Production Bug 之后才想起来应该在某段代码处添加异常补捉,甚至不能准确指出出现异常的原因。
  • 这就需要开发人员不仅知道自己在做什么,而且要去尽可能的知道别人做了什么,可能会导致什么结果,从全局去考虑整个应用程序的处理过程。这些思想会影响我们对代码的编写和处理。

加油吧!咱们一起来修炼吧!修炼什么功法?异常大法?

大胖说:减肥大法[哈哈,我喜欢,上面做的一切都能使用加肥大法的]

瘦子说:你就是懒而已!

大胖说:好吧!我懒!我承认!

减肥大法之乾坤大挪移

怎么说说减肥呢?胖先生是胖,都是悲哀啊!

用别人写好的东西为我所用,如今 Java 第三方日志库的种类越来越多,一个大项目中会引入各种各样的框架,而这些框架又会依赖不同的日志库的实现。

  1. 最麻烦的问题倒不是引入所有需要的这些日志库,问题在于引入的这些日志库之间本身不兼容。
  2. 如果在项目初期可能还好解决,可以把所有代码中的日志库根据需要重新引入一遍,或者换一套框架。
  3. 但这样的成本不是每个项目都承受的起的,而且越是随着项目的进行,这种风险就越大。

怎么样才能有效的避免类似的问题发生呢,现在的大多数框架已经考虑到了类似的问题,可以通过配置 Properties 或 xml 文件、参数或者运行时扫描 Lib 库中的日志实现类,真正在应用程序运行时才确定具体应用哪个特定的日志库。

其实,根据不需要多层次打印日志那条原则,我们就可以简化很多原本调用日志打印代码的类。很多情况下,

重点推荐:利用拦截器或过滤器实现日志的打印,降低代码维护、迁移的成本。

如果有spring推荐使用AOP做日志

感觉如何?

有一些人毕业了,我们还是常有联系!

有一些人即将毕业,请痛快的玩乐,最后的放纵

有一些人患得患失,别在乎那么多,你们还年轻,不努力,等什么呢?

有一些人惧怕未来,没事有胖先生陪你们

有一些人遗忘胖先生

来自为知笔记(Wiz)

时间: 2024-08-06 00:29:31

[六字真言]3.呢.异常的谎言,你要相信多少次?的相关文章

[六字真言]2.嘛.异常定制和通用.md

幻世当空 恩怨休怀 舍悟离迷 六尘不改 且怒且悲且狂哉! 最近一直在循环的一首歌! 丰富自己,比取悦他人更有力量.种下梧桐树,引得凤凰来.你若盛开,蝴蝶自来! 言归正传! 言归正传! 不要去大包大揽 人懒就是动力,我上课的时候为了图省事,经常利用 Exception 捕捉所有潜在的异常这里更正一下,这样的思想不对的,人的能力和经历是有限的,不要让他成为万能的! publicvoid update(User user){ try{ // 假设场景 //…抛出 IOException 的代码调用 /

诚念六字真言的一点体悟

六字真言: 嗡(ong)嘛(ma)呢(ni)呗(bei)咪(mei)吽(hong) 中文的发音有多种,但其实这并不重要,按自己的感觉和喜欢的念就行, 念这个,其实我也没有什么正式规矩怎样怎样的念,有时候心念或听乐曲上的. 后来偶有做恶梦,在梦中我竟然也能念起,然后便恐惧退散了!~ 呵呵,这不管是心理作用还是其他什么,总觉得应该是不错的,毕竟此咒含有诸佛无尽的加持和慈悲,是诸佛 慈悲和智慧的音声显现,此咒即是观世音菩萨的微妙本心! 嗡嘛呢呗咪吽

[六字真言]4.叭.SpringMVC异常痛苦

"叭",除畜生道劳役之苦: 在学过的三阶段的时候,我们对SpringMVC的异常处理,一直可以算是简单中透着暴力,不要不重视异常!真的很重要,不要让它处在尴尬的位置! 在二阶段或者说三阶段中,技术一方面其中我认为最关键的地方是MVC思想的理解,对MVC理解程度决定着你学习过程中的难易程度,虽然有点夸张! 例如,当我们产生了一个 非业务异常 ,或者 非本业务可以处理的其他业务异常 ,那么我们一般会一直往 上层抛 (或者适当包装后继续抛出)直到 控制层 [我们就是这么解决问题,不知道你是否

[六字真言]6.吽.SpringMVC中上传大小异常填坑

最近在讲课的时候,遇到了关于上传文件过大的时候浏览器无法响应的问题,配置了捕获异常,有的学生浏览器好使,有的学生浏览器不好用!莫名其妙! MaxUploadSizeExceededException进入了无限的死循环,╮(╯▽╰)╭ 悲催! 为什么呢? 配置上传信息 在springmvc的核心配置文件配置如下信息 <!-- 5.配置上传 --> <bean id="multipartResolver" class="org.springframework.w

[六字真言]5.咪.功力不足,学习前端JavaScript异常

A Guide to Proper Error Handling in JavaScript 这是关于JavaScript中异常处理的故事.如果你相信 墨菲定律 ,那么任何事情都可能出错,不,一定会出错!这篇文章中我们来看下JavaScript中的出错处理.文章会覆盖异常处理使用的正反例,然后看下ajax的异步处理. JavaScript的事件驱动机制让JavaScript更加丰富,浏览器好比就是一个事件驱动的机器,错误也是一种事件.当一个错误发生时,一个事件就在某个点抛出.理论上,有人会说错误

社群运营之裂变六字诀

裂变带来的低成本.快速获客这件事,可以说是社群鸭运营及微信群生态最吸引创业者的能力.随着创业者不断地尝试.微信不断地调整,越来越多东西被逐渐明确,是时候做第一层的梳理了. 比如,想要大裂变,理解和用好这"六"个字就好,它们是:拼.帮.砍.送.比.换,见实称之为"裂变六字诀". 第一个字是"拼",拼单的拼.用户可以呼朋引伴,一起拼一件更低价格的商品. 第二个字是"帮".帮忙的帮.用户在体验产品的过程中需要帮助随时向好友求助. 第

Java网络编程从入门到精通(19):套接字(Socket)的异常

在Socket类中有很多方法在声明时使用throws抛出了一些异常,这些异常都是IOException的子类.在Socket类的方法中抛出最多的就是SocketException,其余还有七个异常可供Socket类的方法抛出.这些异常的继承关系如图1所示.其中灰色背景框所描述的例外就是Socket类的方法可能抛出的异常. 图1  异常类继承关系图 public class IOException extends Exception 这个异常是所有在Socket类的方法中抛出的异常的父类.因此,在

2016年总结:教师路的开启,爱情味的初尝 (上)

哎!2016年终于结束了,感觉这是自己二十五年生命中最漫长的一年,发生的事情真的太多太多.有毕业母校.同学.老师和朋友的留念,毕竟在帝都一待六年,还是有太多的不舍与情怀:有找工作.做毕业设计以及帮助二十多个陌生人完成毕业设计的艰辛,这些人大多数都是从未谋面的过客,只是自己刚好会写点代码,多做点挺好:有为了自己从小的教师梦,来回奔波京黔,最终放弃互联网.离开北京,虽然遗憾,但从未后悔,有的只是享受:还有讲台前给学生分享自己的大学生活,以及他们带给我的无数感动,数不清的加班夜和凌晨三点的财大:更有年

再见北理工:忆北京研究生的编程时光

两年前,我本科毕业写了这样一篇文章:< 回忆自己的大学四年得与失 >,感慨了自己在北理软院四年的所得所失:两年后,我离开了帝都,回到了贵州家乡,准备开启一段新的教师生涯,在此也写一篇文章纪念下吧! 还是那句话:这篇文章是写给自己的,希望很多年之后,回想起自己北京的六年时光,也是美好的回忆.文章可能有点长,但希望大家像读小说一样耐心品读,看完之后也能温馨一笑或唏嘘摇头,闭上眼睛想想你自己的大学生活吧,很享受的! 同时,这也是自己的第200篇原创文章,三年半的时间,说长不长,说短不短,这期间不论是