我在 spring 中使用了 AOP,没有遇到任何实际问题,主要用于事务管理,这很有吸引力。
我的问题是……到目前为止,我看到的关于 AOP 的唯一示例是切入您自己创建的类。是否可以在第三方库中切入一个类,例如数据库连接类。上下文是我希望在 oracle 数据源执行对数据库的调用时创建一些日志并收集信息,不幸的是,该调用包含在一堆 oracle 类文件中。执行 SQL 时,您将如何切入此类/方法?
我在 spring 中使用了 AOP,没有遇到任何实际问题,主要用于事务管理,这很有吸引力。
我的问题是……到目前为止,我看到的关于 AOP 的唯一示例是切入您自己创建的类。是否可以在第三方库中切入一个类,例如数据库连接类。上下文是我希望在 oracle 数据源执行对数据库的调用时创建一些日志并收集信息,不幸的是,该调用包含在一堆 oracle 类文件中。执行 SQL 时,您将如何切入此类/方法?
我认为这会起作用:
请记住,这种方法会创建原始 DataSource 的代理,并为每个方法调用委托给它。在数据库操作的上下文中,这不应该产生很多额外的开销。您将需要非常小心您的代码正在做什么,以免它引发异常并阻止连接正常运行。也许使用 try/catch/finally 并将委托给“真实”连接的调用放在 finally 块中。
另一种完全不同的方法是使用 AspectJ 并进行加载时编织。这样一来,您就可以在 ClassLoader 加载类时使用新功能来装饰类。