如何在bundle中包装方法调用?

时间:2014-09-18 05:57:56

标签: java logging osgi bundle aop

我有cq5申请。

我们有以下类层次结构(伪代码):

class serviceA{
   methodA1(){...}
   methodA2(){...}
   methodA3(){
      ...
      httprequest
      ...
   }
   methodA4(){...}
}

class serviceB{
   methodB1(){
      ...
      httprequest
      ...
      httprequest
      ...
      httprequest
   }
   methodB2(){...}
   methodB3(){...}
   methodB4(){
     ...
     httprequest
     ...
   }
}

class serviceC{
   methodC1(){
       ...
       httprequest
       ...
       httprequest
       ...
   }
   methodC2(){...}
   methodC3(){    
    ...
    httprequest
    ....
    }
   methodC4(){...}
}

我需要在httprequest之前和之后登录(以测量时间)。

但它是非常悲伤改变每个服务内部码。

你能提供更优雅的决定吗?

OSGI会与Aspectj合作吗?

@AspectService怎么样?

1 个答案:

答案 0 :(得分:0)

如果您严格遵循SOC principle,则必须为HTTP请求创建单独的类:

public class HTTPRequest {
    public void doRequest() { ... } // change signature according to your needs
}

现在必须在您的服务方法中使用此类的实例。

使用该设计,可以非常轻松地进行日志记录行为。只需更改doRequest方法。