适用于第三方课程的AOP

时间:2009-01-30 16:18:07

标签: java spring aop spring-aop

我在春天使用过AOP而没有任何实际问题,主要用于交易管理,因为它具有魅力。

我的问题是这个...到目前为止,我见过AOP的唯一例子是切入你自己创建的课程。是否可以在第三方库中切入一个类,例如数据库连接类。上下文是我希望在oracle数据源执行对数据库的调用时创建一些日志并收集信息,不幸的是,这些调用包含在一堆oracle类文件中。在执行SQL时,您如何切入此类/方法?

1 个答案:

答案 0 :(得分:2)

我认为这会奏效:

  1. 让Spring负责初始化您的DataSource
  2. 对DataSource上的getConnection()方法应用方面
  3. 在你的建议中,将返回的Connection包装在一个实现Connection的新类(“LoggingConnection”)中,并将所有方法委托给“真正”包装的Connection(我相信这是Decorator模式)
  4. 将您需要的任何日志代码添加到“LoggingConnection”类
  5. 请记住,此方法会创建原始DataSource的代理,并为每个方法调用委托它。在数据库操作的上下文中,这不应该产生大量额外开销。您将需要非常小心您的代码正在做什么,以免它抛出异常并阻止Connections正常运行。也许使用try / catch / finally并将委托的调用放在finally块中的“真正的”连接中。

    另一种完全不同的方法是使用AspectJ并进行加载时编织。这样,只要ClassLoader加载它,就可以使用新功能装饰类。