【问题标题】:AOP for third-party classes第三方类的 AOP
【发布时间】:2009-01-31 09:22:29
【问题描述】:

我在 spring 中使用过 AOP,没有遇到任何实际问题,主要用于事务管理,对此它很有魅力。

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

【问题讨论】:

    标签: java spring aop spring-aop


    【解决方案1】:

    我认为这会奏效:

    1. 让 Spring 负责初始化您的数据源
    2. 对 DataSource 上的 getConnection() 方法应用方面
    3. 根据您的建议,将返回的 Connection 包装在一个新类(“LoggingConnection”)中,该类实现 Connection 并将所有方法委托给“真实”包装的 Connection(我相信这是装饰器模式)
    4. 将所需的任何日志记录代码添加到“LoggingConnection”类

    请记住,这种方法会创建原始 DataSource 的代理,并为每个方法调用委托给它。在数据库操作的上下文中,这不应该产生很多额外的开销。您将需要非常小心您的代码正在做什么,以免它引发异常并阻止连接正常运行。也许使用 try/catch/finally 并将委托给“真实”连接的调用放在 finally 块中。

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

    【讨论】:

      猜你喜欢
      • 2016-07-24
      • 1970-01-01
      • 2016-07-23
      • 1970-01-01
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      相关资源
      最近更新 更多