使用动态代理处理异常

来源:互联网 发布:ppt怎么画网络拓扑图 编辑:程序博客网 时间:2024/06/15 23:34

目前遇到一个需要try catch的问题,但我又不喜欢用try catch,所以想到了说可以用动态代理,通过切面代码来写,这样可以不写try-catch,为此总结了如下的知识点:

大概是说把异常处理放在切面里面统一进行
不直接写在业务代码里面

就像下面这样

原来是这样的
function xxx(){
try{
会出异常的代码;
}catch(e){
异常处理;
}
}

每个函数里面都套上try-catch好烦啊
所以直接写成这样:
function xxx() throws exceptions{
会出异常的代码;
}

然后在某个地方配置
拦截所有对这个函数的调用
别的代码仍然以为调用的是xxx函数
实际上可能调用的是下面的aop函数
function aop(){
try{
return xxx();
}catch(e){
异常处理;
}
}

延伸一下的话,别的函数调用也可以被拦截
然后由aop函数统一处理
这样对于同一类的异常处理就可以用一套配置处理了
省去了每次都处理的麻烦

另一点,这里的拦截对调用方和被调用方都是透明的
这也就意味着他们不知道被拦截处理了

实际上函数调用就是在一个对象里面调用另一个对象的方法
实际上也就是向另一个对象发送消息
假设这个消息最初从界面产生(比如用户点击了一个按钮)
发送到了控制器层
控制器发送到了服务层
服务发送到了持久化层
持久化读取数据传回给服务层
服务层组织数据传回控制器层
控制器层排版数据返回视图给用户

消息在业务逻辑的管道中传输
而刚才的拦截就好像将管道切开一个面
用一段管道塞入到这里面
而切面前后的逻辑不知道这里多赛了一段管子

这种思想就是面向切面编程
好处是
在不影响原有业务逻辑的情况下
插入新的处理
0 0
原创粉丝点击