java - 第三方类的AOP

标签 java spring aop spring-aop

我在 spring 中使用了 AOP,没有出现任何实际问题,主要用于事务管理,这非常有用。

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

最佳答案

我认为这会起作用:

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

请记住,此方法创建原始数据源的代理,并为每个方法调用委托(delegate)给它。在数据库操作的上下文中,这不应该产生大量额外的开销。您需要非常小心代码正在执行的操作,以免抛出异常并阻止连接正常运行。也许使用 try/catch/finally 并将委托(delegate)给“真实”连接的调用放入您的 finally block 中。

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

关于java - 第三方类的AOP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/496080/

相关文章:

java - 在 Ubuntu 上安装 Eclipse/Java

java - 定义动态单元格范围

spring - WebFlux 功能 : How to detect an empty Flux and return 404?

spring - 命名 DTO 和实体类

java - 使用AspectJ监控数据库访问方式

java - Advice 从具体非泛型类中的泛型抽象类继承方法

java - 在 slf4j 或 logback 中使用 decimalformat 来填充或标识数字,以便它们正确对齐

java - 从 Java 中的文本文件中读取 long 类型

spring - 使用 Swagger/OpenAPI 文档模拟 Rest API

java - 在 AOP 注释切入点上获取注释