[六字真言]3.呢.异常的谎言,你要相信多少次?
Posted 胖猿圈,码迷码迷吽!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[六字真言]3.呢.异常的谎言,你要相信多少次?相关的知识,希望对你有一定的参考价值。
"嘛,呢",梵文意为“如意宝”,表示“宝部心”,又叫嘛呢宝,其实就是有"聚宝"的意思!
现在的社会现在的人,都是喜欢虚的假的,不喜欢真的诚的,谁虚伪谁高人一等,谁真诚谁傻瓜一个,这句话很现实的,会做的不如会说的.
这就是现实,真情可贵,用心陪醉,虚伪面对,从容领会,我就是永远都学不会
不知道最近心是怎么样了,周围发生了一些固有的定律,其实知道,只是不说!有的时候感觉大家都是聪明人,但是都在做不聪明的事情!
重复多次的"谎言"
有时开发的时候我们总不是单线条的去完成一些事情,会比较复杂.
如下情景:
定义了 2 个类 UserService 和 RoleService。其中 UserService 类中调用了 RolerService 类的代码,并且 UserService 类和 RoleService 类中都捕捉打印了异常.
代码如下
public class UserService {
//必须要使用这样的日志输出,不要使用system.out了
private static Logger logger = LoggerFactory.getLogger(UserService.class);
public void process(){
try{
//实例化 RoleService 类,可以换成其它注入等方式
RoleService roleService = new RoleService();
roleService.process();
//other code might cause exception
} catch(XXXException e){
//如果 RoleService 类 process 方法抛出异常,异常会在 RoleService 类中被打印,在这里也会被打印,从而会打印 2 次
logger.error(e);
throw new RuntimeException(/* 错误代码 */ errorCode, /*异常信息*/msg, e);
}
}
}
public class RoleService{
private static Logger logger = LoggerFactory.getLogger(RoleService.class);
public void process(){
try{
//可能抛出异常的代码
}
catch(XXXException e){
logger.error(e);
throw new RuntimeException(/* 错误代码 */ errorCode, /*异常信息*/msg, e);
}
}
}
"谎言"说一次就可以了,别把我们当成傻瓜!
同一段异常会被打印 2 次。如果层次再复杂一点
,不去考虑打印日志消耗的系统性能,仅仅在异常日志中去定位异常
具体的问题已经够头疼的了。
其实打印日志只需要在代码的最外层捕捉
打印就可以了,异常打印也可以写成 AOP,织入到框架的最外层.
面试问题: 如果问道AOP的时候
- AOP的实现方式->Java的动态代理
- AOP的五种通知方式,并且要知道如何使用?
- AOP的你做过什么事情?日志的监控[登录日志/操作日志]
认清自己不容易
不管你再公司也好还是在生活中,都需要认清自己的定位
胖先生就是这样,有的时候对自己的定位不清楚,想要什么也不清楚!一直的浑浑噩噩吧!
一定记住,对于我们来说:出异常是最好的事情
异常不仅要能够让开发人员知道哪里出了问题,更多时候开发人员还需要知道是什么原因导致的问题,我们知道 java.lang.Exception 有字符串类型参数的构造方法,这个字符串可以自定义成通俗易懂的提示信息。
万能大法:java.lang.Exception
简单的自定义信息开发人员只能知道哪里出现了异常,但是很多的情况下,开发人员更需要知道是什么参数导致了这样的异常。这个时候我们就需要将方法调用的参数信息追加到自定义信息中。
下例只列举了一个参数的情况,多个参数的情况下,可以单独写一个工具类组织这样的字符串。
根据实际情况,来完成
public void load(Long id){
try{
//..some code that throws SQLException
}catch(SQLException ex){
//将参数信息添加到异常信息中
throw new RuntimeException(“Exception in load with Object Id :”+ id, ex);
}
}
与人方便自己方便
不可知的环境,请小心
如果你掌握了上面的技巧,那么算是入门了吧!慢慢来,路很长胖先生陪着你们走!虽然不知道能走多远.
在写代码的过程中,由于对调用代码缺乏深层次的了解,不能准确判断是否调用的代码会产生异常
[经验基础的积累]
,因而忽略处理。在产生了 Production Bug 之后才想起来应该在某段代码处添加异常补捉,甚至不能准确指出出现异常的原因。
这就需要开发人员
不仅知道自己在做什么
,而且要去尽可能的知道别人做了什么
,可能会导致什么结果
,从全局去考虑整个应用程序的处理过程。这些思想会影响我们对代码的编写和处理。
加油吧!咱们一起来修炼吧!修炼什么功法?异常大法?
大胖说:减肥大法[哈哈,我喜欢,上面做的一切都能使用加肥大法的]
瘦子说:你就是懒而已!
大胖说:好吧!我懒!我承认!
减肥大法之乾坤大挪移
怎么说说减肥呢?胖先生是胖,都是悲哀啊!
用别人写好的东西为我所用,如今 Java 第三方日志库的种类越来越多,一个大项目中会引入各种各样的框架,而这些框架又会依赖不同的日志库的实现。
最麻烦的问题倒不是引入所有需要的这些日志库,问题在于引入的这些日志库之间本身不兼容。
如果在项目初期可能还好解决,可以把所有代码中的日志库根据需要重新引入一遍,或者换一套框架。
但这样的成本不是每个项目都承受的起的,而且越是随着项目的进行,这种风险就越大。
怎么样才能有效的避免类似的问题发生呢,现在的大多数框架已经考虑到了类似的问题,可以通过配置 Properties 或 xml 文件
、参数或者运行时扫描 Lib 库
中的日志实现类,真正在应用程序运行时才确定具体应用哪个特定的日志库。
其实,根据不需要多层次
打印日志那条原则,我们就可以简化很多原本调用日志打印代码的类。很多情况下,
重点推荐:利用拦截器或过滤器实现日志的打印,降低代码维护、迁移的成本。
如果有spring推荐使用AOP做日志
感觉如何?
有一些人毕业了,我们还是常有联系!
有一些人即将毕业,请痛快的玩乐,最后的放纵
有一些人患得患失,别在乎那么多,你们还年轻,不努力,等什么呢?
有一些人惧怕未来,没事有胖先生陪你们
有一些人遗忘胖先生
以上是关于[六字真言]3.呢.异常的谎言,你要相信多少次?的主要内容,如果未能解决你的问题,请参考以下文章