zoukankan      html  css  js  c++  java
  • AOP

    最近做了AOP, 监测工程中的某些数据. 但是不能影响原工程, 也不在原工程中写代码; 面向切面编程, AOP.
    首先使用了个开源的第三方, Aspects;
    关于框架的搭建
    第一个版本主要是收集Node中的数据. 之后肯定还会收集其他的数据; 主要就是对 WebSocket 中的方法, 插入代码. 所以需要一个管理类, 管理要去收集哪些数据; 在管理类中有一个数组, 其中存放着使用了的对象.这些对象去收集需要的数据; 这些对象可随时添加和移除; 这些对象都有一些公共特征, 所以写成一个公共的基础类(baseObject);
    既然是面向切面编程, 不能影响了原代码的效率, 所以需要在自己的线程中处理;

    Node数据收集
    思路:在WebSocket调用 setDelegate: 的时候, 把delegate 设置成自己的对象, 操作后再转发给原来的对象; 在继承于baseObject的类中, 要去设置新的代理, 并给其他需要关注的方法插入代码. 本来想着使用单例, 这样就可以保证只有一个对象管理WebSocket的有关代码.但是这样用的单例太多, 其实完全没有必要.(之前为什么会用单例, 是因为在管理类中, 要控制Socket 数据收集的开启和关闭, 因为不在一个方法中, 所以不能找到同一个对象, 使用了数组管理, 并且给其加上一个分类type标签, 就可以区分出具体的对象, 因为每种只有一个对象, 所以只需要一个是什么类型的标签就可以);
    在hook方法中, 要对多个socket方法进行操作, 每次都要设置代理为A, 怎么可以保证是同一个A? 可以给 socket 添加一个属性, 每次找到的都是同一个A; 给 NSObject 写一个分类, 添加一个属性, 用来存储新的代理对象; 因为如果外界使用了两个 socket 只有一个代理的话, 肯定是不对的;
    我们其实没有使用 socket 对象, 只是代理方法中, 引用了 Socket对象, 我们将代理方法中的socket 改成 id类型, 就不必依赖 WebSocket 框架了.


  • 相关阅读:
    BZOJ3868 : The only survival
    BZOJ3740 : pku2842 N-dimension Matching N维匹配
    BZOJ2990 : [Ontak2010]Keyboard
    BZOJ3548 : [ONTAK2010]Party
    BZOJ3189 : [Coci2011]Slika
    BZOJ2679 : [Usaco2012 Open]Balanced Cow Subsets
    BZOJ2981 : [Poi2002]括号
    BZOJ4116 : [Wf2015]Tours
    BZOJ4107 : [Wf2015]Asteroids
    BZOJ4118 : [Wf2015]Window Manager
  • 原文地址:https://www.cnblogs.com/lion-witcher/p/7324107.html
Copyright © 2011-2022 走看看