spring aop - 在为JdbcTemplate方法创建建议时出现异常

时间:2013-05-14 14:30:49

标签: spring aspectj spring-aop

我有一个使用apache dbcp和spring jdbc在oracle数据库上执行数据库操作的Web应用程序。我需要编写一个性能记录器来记录每个数据库操作的各个时间。我尝试在org.springframework.jdbc.core.JdbcTemplate的所有'execute'方法上编写一个around建议,但是当spring初始化时会导致错误。记录器类和异常堆栈跟踪如下: -

我也尝试通过启用CGLIB代理,但是它在从spring的StoredProcedure类扩展并使用构造函数注入的dao类上出错。

@Aspect
public class Logger {

@Around("this(org.springframework.jdbc.core.JdbcTemplate) && execution(* execute(*))")
public Object invoke(ProceedingJoinPoint pjp) throws Throwable {
    long time = System.currentTimeMillis();
    Object result = pjp.proceed();
    LOGGER.debug("time consumed = " + (System.currentTimeMillis() - time));
    return result;
}

异常堆栈跟踪:

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name 'myDao' defined in class path resource [spring/my-dao.xml]: Unsatisfied dependency expressed through constructor argument with index 0 of type [org.springframework.jdbc.core.JdbcTemplate]:
Could not convert constructor argument value of type [$Proxy7] to required type [org.springframework.jdbc.core.JdbcTemplate]:
Failed to convert value of type '$Proxy7 implementing org.springframework.jdbc.core.JdbcOperations,org.springframework.beans.factory.InitializingBean,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised'
to required type 'org.springframework.jdbc.core.JdbcTemplate';
nested exception is
java.lang.IllegalStateException: Cannot convert value of type [$Proxy7 implementing org.springframework.jdbc.core.JdbcOperations,org.springframework.beans.factory.InitializingBean,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised]
to required type [org.springframework.jdbc.core.JdbcTemplate]:
no matching editors or conversion strategy found
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:702)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:196)

0 个答案:

没有答案