【转】面向切面编程-AOP,挺有用的

原文:http://blog.csdn.net/yangzhihello/article/details/40377399

下面的代码有点问题,

  ins[methodName] = function(){

       callback.apply(ins,arguments)

    return method.apply(ins,arguments);

}

这段也要放到上面的if 语句块里面去!!!

-------------------------------------------------------------------------------------------------------------------

对于java中的aop,早有耳闻,所谓面向切面编程,不过一直都以为只是在后台才会用到。

从做前端开始就没有这方面的需求,这一次对于一些东西做新的想法,发现有些东西还是可以去考虑考虑的。

有一个公用的代码,可能在很多地方都会被用到,那么现在要做的就是,需要这个方法跑起来之前走一些东西,在这个方法跑完之后,还在处理一些东西。

那么问题就来了:

1 直接改之前封装好的东西,Ok,可以没问题,但是这样做了之后,别处用到这个东西的地方就直接崩溃了!

2 那么如果采用直接复制一份代码,修改单个这一处的问题,ok,没有问题,但是这不也就是代表着代码冗余越来越多。

这个时候想起了,在java里面有一个东西,面向切面,添加切点,一切似乎就可以正常的跑起来了。是的,就这么干.....

如下:

由于是工具类,无需实例化,刚直接可以采用{}对象方式:

[javascript] view plain copy

  1. aop = window.aop || {};
  2. aop = {
  3. doBefore:function(ins,methodName,callback){
  4. if(typeof ins[methodName] != "undefined"){
  5. var method = ins[methodName];
  6. }
  7. ins[methodName] = function(){
  8. callback.apply(ins,arguments)
  9. return method.apply(ins,arguments);
  10. }
  11. },
  12. doAfter:function(ins,methodName,callback){
  13. if(typeof ins[methodName] != "undefined"){
  14. var method = ins[methodName];
  15. }
  16. ins[methodName] = function(){
  17. var ret = method.apply(ins,arguments),
  18. callret = callback.apply(ins,arguments);
  19. return typeof callret == "undefined" ? ret : callret;
  20. }
  21. }
  22. }

html 中测试如下:

[html] view plain copy

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  3. <head>
  4. <script type="text/javascript" src="aop.js"></script>
  5. <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
  6. <title>aop javascript</title>
  7. </head>
  8. <body>
  9. <script type="text/javascript">
  10. //json对象
  11. var obj = {
  12. run:function(){
  13. console.log("run");
  14. },
  15. init:function(name){
  16. console.log("arguments : " + name);
  17. return "info";
  18. }
  19. };
  20. aop.before(obj,"run",function(){
  21. console.log("run before");
  22. });
  23. aop.after(obj,"run",function(){
  24. console.log("run after");
  25. });
  26. console.log("<!-----json对象--------->");
  27. obj.run();
  28. var F = function(){};
  29. F.prototype = {
  30. run:function(){
  31. console.log("prototype run");
  32. }
  33. };
  34. //创建对象
  35. console.log("<!-----创建对象--------->");
  36. var f = new F();
  37. aop.before(f,"run",function(){
  38. console.log("prototype run before");
  39. });
  40. aop.after(f,"run",function(){
  41. console.log("prototype run after");
  42. });
  43. f.run();
  44. //参数问题
  45. console.log("<!-----参数问题--------->");
  46. aop.before(obj,"init",function(name){
  47. console.log("arguments before :" + name);
  48. });
  49. aop.after(obj,"init",function(name){
  50. console.log("arguments after :" + name);
  51. return "next";
  52. });
  53. console.log(obj.init("user"));
  54. </script>
  55. </body>
  56. </html>

这里多种情况,包括参数的传递问题,皆有考虑!

偶有所得,以记录之,谨防忘记!

原文地址:https://www.cnblogs.com/oxspirt/p/8410550.html

时间: 2024-10-10 16:58:30

【转】面向切面编程-AOP,挺有用的的相关文章

Web项目中静态代理和动态代理为基础的面向切面编程AOP

本来每天更新的,我一般喜欢夜里过了十二点的时候发文章,结果难道是愚人节吗?学校的网也很有意思,断了,把我给耍了...好吧-开始今天的话题AOP.AOP太重要了,所以放到第二篇文章来谈这个话题,AOP是Spring中的重要概念.如果这个不理解Web开发中的三大框架的原理,那就呵呵了.时常听到同学和网友议论Web程序员大部分时间都是在考皮XML配置,我当时听到也是醉了,所以我要用心学习Web,其实这里面蕴含的设计模式.算法.架构思想在源码中体现的淋漓尽致啊,一个大宝库竟然视而不见可惜了.下面就一起品

面向切面编程——Aop

一.概念 AOP(Aspect-Oriented Programming,面向切面的编程),它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术.它是一种新的方法论,它是对传统OOP编程的一种补充. 二.Aop原理 1.面向对象编程模型 OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分.面向对象编程是关注将需求功能划分为不同的并且相对独立,封装良好的类,并让它们有着属于自己的行为,依靠继承和多态等

Spring(四):面向切面编程AOP

横切关注点:分布于应用中多处的功能 面向切面编程AOP:将横切关注点与业务逻辑相分离 在使用面向切面编程时,仍在一个地方定义通用功能,但是可以通过声明的方式定义这个功能以何种方式在何处应用,而无需修改受影响的类. 横切关注点可以被模块化为特殊的类,这些类被称为切面. 好处: 每个关注点集中于一处,而不是分散到多处代码中 服务模块更加简洁,因为它们只包含主要关注点的代码,次要关注点被转移到切面中了 1.定义AOP术语 1.1.通知(Advice) 切面的工作被称为通知. 通知定义了切面是什么以及何

面向切面编程aop

面向切面编程 (AOP) Aspect Oriented Programming 可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术.AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,提高代码的灵活性和可扩展性,AOP可以说也是这种目标的一种实现. 主要功能 日志记录,性能统计,安全控制,事务处理,异常处理等等 主要意图 将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的

spring中面向切面编程(AOP)的个人理解

面向切面编程AOP,是spring的一大特点 Aspect切面:封装共性功能的(增强功能的)类 Advice通过:切面类中封装的增强功能的方法. PointCut:切入点,是一个集合的概念,该集合的表达使用一个正则表达式表达 所有核心业务对象的所有方法的前后(事务处理AOP典型的应用) JoinPoint:连接点,程序中需要加入advice的地方,而且正在执行的ponitCut 织入(Weaving):将aspect和核心业务对象,进行整合的过程. 通过特定接口实现AOp Aop通知的类型: B

【串线篇】面向切面编程AOP

面向切面编程AOP 描述:将某段代码“动态”的切入到“指定方法”的“指定位置”进行运行的一种编程方式 (其底层就是Java的动态代理)spring对其做了简化书写 场景: 1).AOP加日志保存到数据库 2).AOP做权限验证,filter能做的它都能 3).AOP做安全检查 4).AOP做事务控制 AOP专业术语: 原文地址:https://www.cnblogs.com/yanl55555/p/11744089.html

Spring之面向切面编程AOP(二)

简介 当积累的知识点到一定量的时候,学新知识就变得容易多了.希望再接下来的学习顺利进行下去.今天知识也是挺简单的,主要就是AOP面向切面编程.其中牵涉到了JDKProxy和CGLIB两个代理类,如何使用好,加以深刻理解.学起Spring切面编程也就简单多了 代理模式 1. 代理模式介绍 代理模式的英文叫做Proxy或Surrogate,中文都可译为"代理",所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对

Spring面向切面编程(AOP)

1 spring容器中bean特性 Spring容器的javabean对象默认是单例的. 通过在xml文件中,配置可以使用某些对象为多列. Spring容器中的javabean对象默认是立即加载(立即实例化:spring加载完成,立即创建对象) scope:属性 singleton:默认值为单例,默认也是立即加载,在加载完成spring容器的时候,bean对象已经创建完成 prototype:多例的,默认懒加载,spring容器加载完成的时候,不会创建bean的对象,只有从容器获得bean对象的

面向切面编程AOP之动态代理

动态代理的作用是:最终是为了学习AOP(面向切面编程):    拓展一下:OOP是什么?  OOP是面向对象编程!! 面向切面--->与装饰者模式有点相似 --->比装饰者模式还要灵活 学习动态代理,我们只需要学习一下一个类即可 Proxy类,并对该类下的一个静态方法newProxyInstance()进行学习 直接上代码: