background image

  BusinessInterface businessImp = new BusinessObject();
  InvocationHandler handler = new LogHandler(businessImp);
  BusinessInterface proxy = (BusinessInterface) Proxy.newProxyInstance(
  businessImp.getClass().getClassLoader(),
  businessImp.getClass().getInterfaces(),
  handler);
  proxy.processBusiness();
 
  程序输出如下:
  INFO: method stats...
  here is business logic
  INFO: method ends...
  至此我们的第一次小尝试算是完成了。可以看到,采用 AOP 之后,日志记录和业务
逻辑代码完全分开了,以后要改变日志记录的话只需要修改日志记录处理器就行了,而
业务对象本身(BusinessObject)无需做任何修改。并且这个日志记录不会造成重复代码
了,所有的商业处理对象都可以重用这个日志处理器。
  当然在实际应用中,这个例子就显得太粗糙了。由于 JDK 的动态代理并没有直接支持
一次注册多个 InvocationHandler

 

,那么我们对业务处理 方法既要日志记录又要性能统

计时,就需要自己做一些变通了。一般我们可以自己定义一个 Handler 接口,然后维护
一个队列存放所有 Handler,   

当 InvocationHandler 被触发的时候我们依次调用自己的

Handler。所幸的是目前几乎所有的 AOP Framework

 

都对这方面提供了 很好的支持.这

里推荐大家使用 Spring。