通过AOP从JdbcTemplate或SimpleJdbcTemplate记录SQL语句



我正在尝试使用面向方面的编程来记录springJdbcTemplate和SimpleJdbcTemplate中执行的SQL查询。我已经复制粘贴的代码从这个教程

Pointcut定义为

@Before(
    "execution(* org.springframework.jdbc.core.JdbcOperations.*(String, ..))"
)

非常适合拦截JdbcTemplate查询。但当我把切入点改为时

@Before(
    "execution(* org.springframework.jdbc.core.JdbcOperations.*(String, ..)) throws *Exception || " +
    "execution(* org.springframework.jdbc.core.simple.SimpleJdbcOperations.*(String, ..)) throws *Exception"
)

@Before(
    "execution(* org.springframework.jdbc.core.JdbcOperations.*(String, ..)) || " +
    "execution(* org.springframework.jdbc.core.simple.SimpleJdbcOperations.*(String, ..))"
)

则只拦截JdbcTemplate查询,而不拦截SimpleJdbcTemplate查询。

有任何提示如何通过AOP拦截SimpleJdbcTemplate的查询,同时保留JdbcTemplate的登录查询吗?

作为一名AspectJ用户,我可以说您的切入点看起来不错。作为一个非Spring用户,我只能推测

  • 也许您的代码根本不使用SimpleJdbcOperations,或者
  • 也许Spring本身并没有,尽管您期望它这样做,可能是因为自Spring3.1以来,该接口实际上已经被弃用了

顺便说一句,只是为了好玩,我有一个主意给你,如果你不介意同时捕获NamedParameterJdbcOperations:,你可以如何真正缩短你的切入点

@Before("execution(* org.springframework.jdbc.core..*JdbcOperations.*(String, ..))")

相关内容

  • 没有找到相关文章

最新更新