我想要做的是在对当前会话执行的任何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创建? ”; 任何意见和建议将不胜感激。谢谢!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。