科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航



ZDNet>软件频道>中间件-zhiding>AOP中的主要技术

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

  1.Method Interceptor   使用AOP方法,我们可以在运行时产生某个类的Proxy类。

来源:中国IT实验室 2007年09月26日

关键字:java 编程


  1.Method Interceptor
  使用AOP方法,我们可以在运行时产生某个类的Proxy类。例如UserProxy继承User
  
  getName()    invoke()      invoke()     getName()
  --->UserProxy------->InterceptorA----->InterceptorB--...--->User
  
  2.“多重继承”
  在产生UserProxy时,还可以同时给它其他接口使其实现。当UserProxy
  实例化时,同时也会创建这些接口的Proxy.
  例如需要实现Node接口,Node接口定义了方法getFolder()
  
  getFolder()  getFolder()    getFolder
  --->UserProxy ------> NodeProxy ----> Node
  
  发信人: gty (宜良-丽江-蝴蝶泉), 信区: JavaClub
  标 题: AOP中的主要技术
  发信站: BBS 水木清华站 (Fri Feb 21 02:26:15 2003), 转信
  
  1.Method Interceptor
  使用AOP方法,我们可以在运行时产生某个类的Proxy类。例如UserProxy继承User
  
  
  getName()    invoke()      invoke()     getName()
  --->UserProxy------->InterceptorA----->InterceptorB--...--->User
  
  2.“多重继承”
  在产生UserProxy时,还可以同时给它其他接口使其实现。当UserProxy
  实例化时,同时也会创建这些接口的Proxy.
  例如需要实现Node接口,Node接口定义了方法getFolder()
  
  getFolder()  getFolder()    getFolder
  --->UserProxy ------> NodeProxy ----> Node
  
  3 Runtime Attribute
  就是利用java doc注释,进行编程。传统情况下,我们只是把java doc作为注释,并不在运行时使用,现在,这些java doc也可以作为程序运行时的一个要素了。
  ---------------------
  | 示例:                               |
  |    @magic.tx type=required       |
  |  public void makeOrder(Order order) { |
  |   ...
  |
  |  };
  |
  |                    |
  ------------------------------------------
  在这个例子中,运行时,系统可以通过API访问到@magic.tx的type是required,从而控制Transaction。

查看本文来源


  Session Pool Design
  
  1. 利用apache common-pool实现一个Session Pool(非常简单)
  2. 如何避免代码中的returnObject()?
  
      xxx()      invoke
      --------> PoolProxy ---> PoolInterceptor   SessionPool
                        borrowObject()
                       --------------->
                       <---------------
  
  
                            xxx()    Session (be borr
  owed)
                       -------------------------------->
  
                        returnObject()
                       ---------------->
  
  --
  
  RMI design
  
   xxx()      invoke        Serialize call to remote
  -----> ClientProxy ---> RmiInterceptor ------------------->
  
       find ServerProxy, xxx()        xxx()
  RmiServer----------------> ServerProxy --->....-->ServerObject
  
  Method Cache design
  
  1.用HashMap做cache
  
   xxx()    invoke
  -----> Proxy ---> MCInterceptor
              1. get Attribute @timeout
              2. 用object[]作为key,看cache中的
              结果是否超时
  
              3. 如果超时   invoke
               ------------------> NextInterceptor...
              4. 如果不超,返回被cache的结果
  Draw activity UML diagram:
  
  1. 实现绘图模块
  xxx()   invoke
  ---> Proxy ---> ActivityIntercpetor
                 draw xxx()
              --------------->绘图模块
                invoke
              --------------------------->NextInterceptor...
  
  Persistence and descriptive transaction
  
  1. Persistence直接使用hibernate
  
  
  xxx    invoke
  ---->Proxy-->HibernateInterceptor
                  1. 取得@tx,应该为required,requiresnew
                  ,supports,notsupported中的一种
                  2. 判断当前的transaction状态
                  3. 决定本次调用是否在transaction当中
  Folder-Node关系的复用
  
  
  getFolder()  getFolder()     invoke       getFolder()
   --->UserProxy ------> NodeProxy -->SideEntityInterceptor--> Node
                              return Folder
                              <-----
                         根据Folder创建Group proxy
                   返回GroupProxy
                   <----
  
   in the code, like this:
  
  ...
  User user = userFactory.find("guty"); //user is actually a proxy
  Group group = (Group)((Node)user).getFolder();

查看本文来源

推广二维码
邮件订阅

如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

重磅专题