【发布时间】:2014-05-15 10:08:53
【问题描述】:
我尝试做一个切入点,记录 SQL 查询
@Before("execution(* org.springframework.jdbc.core.JdbcTemplate.*(String, ..))")
public void logSQLQueries() {
System.out.println("@@");
}
我正在尝试像这里那样实现代码; http://www.gotoquiz.com/web-coding/programming/java-programming/log-sql-statements-with-parameter-values-filled-in-spring-jdbc/
但我明白了
java.lang.IllegalArgumentException: Can not set org.springframework.jdbc.core.JdbcTemplate field com.xyz.abc.dao.ABCDaoImpl.jdbcTemplate to com.sun.proxy.$Proxy53
我在我的 *-servlet.xml 中创建了 jdbcTemplate bean,并在我所有的 DAO 中自动装配了它。工作得很好,但添加切入点会出现异常。有任何想法吗 ??
【问题讨论】:
-
程序到接口而不是具体类。 Spring 使用代理来应用 AOP。而不是
JdbcTemplate使用JdbcOperations后者是接口(你可能也想在你的ointcut 中使用它)。或者从基于接口的代理切换到基于类的代理,或者不使用代理而是使用加载时编织来应用方面。 -
你指向的例子甚至做了@M.Deinum 刚刚告诉你的,你修改了它!顺便说一句,Spring AOP 也适用于类而不是首选接口,但是您的类路径中需要 CGLIB。
-
我确实首先尝试了界面,但是当它不起作用时,我尝试了一些不同的东西。我不明白这里代理的概念。你能提供一个我能理解这个概念的参考吗?另外,我如何切换到基于类的代理,或使用加载时间编织。感谢您的回复,请务必给出答案,以便我标记它。
-
@kriegaex 我的类路径中已经有 cglib,请您解释一下它应该如何提供帮助。谢谢
-
请发布完整的调用堆栈并切换回界面。
标签: spring spring-mvc proxy aspectj spring-aop