我正在尝试使用面向方面的编程来记录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, ..))")