关于JFINAL对AOP的支持

长篇小说 发布于 2016/02/04 09:07
阅读 1K+
收藏 0

@JFinal 你好,想跟你请教个问题:波总,群里总听大家在讨论AOP,按我原来使用JFINAL的理解,aop就当挡截器在用了,接收了controller的参数,增强了处理,后来听说jfinal又增加了业务层aop,duang,测试使用了一下,也都会用,就是不能够深入理解,对某一个类进行了增加是会用了,就是不知道用在什么业务场景。听大家讨论这个概念的时候,感觉很高大上的样子,手册已看,也会用,请教波总协助小伙伴们深入理解一下jfinal的aop?谢谢。

加载中
0
JFinal
JFinal

     AOP 是极度重要必不可少的框架特性,简单说明一下其意义与用法。OOP(面向对象编程) 是非常伟大的发明,它有利于人类思维模式对现实世界的抽象与把控,设计出高可重用、高可读性、高可维护性等优点的软件。

    但OOP也有一个非常大的缺点,就是对切面(横向)问题支持不好,会带来很多冗余代码,有前扑后继的人试图用继承和抽象来解决切面问题,结果是class数量的膨胀,继承层次偏多,代码可读性降低,非常不优雅。

   AOP 最核心作用就是解决 OOP 不擅长的切面问题。举个例子:权限控制这个功能,通常需要在用户访问时,对系统大部分模块或资源进行权限检查,用 OOP 的方式解决,通常是将权限检查做成一个公共的模块,然后在需要检查的地方调用一次,那么,如果项目中如果有 10000 个地方需要权限检查,就需要将这段检查性的代码重复书写 1000 次,造成了大量的冗余代码,而且还增加了耦合度。

   类似于上面的例子,切面性的功能还有很多种,例如你需要做一个分析用户行为的功能,记录用户对每个action请求的时间、资源、参数等,进而分析用户的行为,这也是AOP适合的场景。

   宏观上来说切面性质的代码都属于AOP的范畴,实现方式可以不同,例如有的实现利用是一个简单的代理,jfinal 的 AOP 实现是利用的环绕型拦截器,形式上不同,本质相同。

    简而言之,AOP 是 OOP 强有力的补充,OOP 很好地解决了纵向问题,AOP 很好地解决了横向(切面)问题,一纵一横对于一门程序语言来来说才是完备的。

0
长篇小说
十分感谢波总的指点,非常经典的回复
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部