开发者社区> 问答> 正文

如何拦截实例由我自己创建的JdbcTemplate

我想要做的是在对当前会话执行的任何DQL(“ SELECT ...”)或DML(INSERT / UPDATE / DELETE ...)之后收集DB统计值。 当前,我已经利用Spring AOP实现了以下目标:

@Aspect @Component public class StatisticalValueCollector { @After("execution(* org.springframework.jdbc.core..JdbcOperations.(String, ..))") public void collectStatisTicalValues(JoinPoint jp) { //Collect DB statistical values } } 它的工作原理perfectlly两者JdbcTemplate并NamedParameterJdbcTemplate通过注释的@Autowired,但是当我自己创建它们的实例ㄋ ,这是行不通的。

工作示例:

@Autowired JdbcTemplate jdbcTemplate; ... List<Map<String, Object>> result = jdbcTemplate.queryForList("SELECT ..."); 无效的示例:

DriverManagerDatasource ds = new DriverManagerDatasource(); ... JdbcTemplate jdbcTemplate = new JdbcTemplate (ds); List<Map<String, Object>> result = jdbcTemplate.queryForList("SELECT ..."); 据我所知,如果似乎JdbcTemplate是由Spring创建的,则可以根据此后AOP进行代理:可以拦截JDBCTemplate调用,但不能拦截NamedParameterJdbcTemplate调用 。

因此,我的问题是“ 如何自己拦截JdbcTemplate或NamedParameterJdbcTemplate创建? ”; 任何意见和建议将不胜感激。谢谢!

展开
收起
被纵养的懒猫 2019-10-08 17:20:47 1340 0
0 条回答
写回答
取消 提交回答
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载