AOP:可以拦截JDBCTemplate调用,但不能拦截NamedParameterJdbcTemplate调用

时间:2018-10-03 19:04:10

标签: spring-boot aop spring-aop

我做了两种测试方法。一个使用JdbcTemplate进行查询,而另一个使用NamedParameterJDBCTemplate。

使用NamedParameterJdbcTemplate:

@Autowired
    JdbcTemplate jdbcTemplate;

    public Student findById(long id) {
        NamedParameterJdbcTemplate apptemplate = new NamedParameterJdbcTemplate(jdbcTemplate.getDataSource());
        return apptemplate.queryForObject("select * from student where id="+id, Collections.emptyMap(),
                new BeanPropertyRowMapper< Student >(Student.class));
    }

使用JdbcTemplate

@Autowired
JdbcTemplate jdbcTemplate;


public Student findById(long id) {
    return jdbcTemplate.queryForObject("select * from student where id=?", new Object[] {
                    id
            },
            new BeanPropertyRowMapper< Student >(Student.class));
}

我正在使用以下切入点进行拦截:

对于JdbcTemplate:

@Pointcut("execution(* org.springframework.jdbc.core.JdbcOperations+.*(..))")
public void forJdbcTemplate() {
}

对于NamedParameterJdbcTemplate:

@Pointcut("execution(* org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations+.*(..))")
public void forNamedParameterJdbcTemplate() {
}

为什么我的JdbcTemplate切入点有效,但NamedParameterJdbcTemplate的切入点无效?

0 个答案:

没有答案