-
Spring aop ThrowsAdvice 监测一个返回list的方法 提示 Object cannot be cast to java.util.List5
我想通过这个来集中处理代码中的异常,并将异常发送给指定的邮箱,发送邮件可以实现,但是测试的过程中出现一个问题,当要执行的一个方法返回的List<?>泛型的时候 实现afterThrowing的方法会提示说 java.lang.ClassCastException: java.lang.Object cannot be cast to java.util.List
以下是SpringMVC controller 中的action
public ModelAndView query(HttpServletRequest request,HttpServletResponse response){
try {
request.setAttribute("users", UserService.query());
} catch (Exception e) {
e.printStackTrace();
}
return new ModelAndView(this.getSuccessView());
}
以下是service中的方法
public List<User> query()throws RuntimeException{
List<User>list=this.sqlSession.selectList("User.getUserList2");
return list;
}
/****
*实现 ThrowsAdvice的类
主要用于检测出现的Exception,然后发送给指定邮箱
******/
package com.mvc.aop;
import java.lang.reflect.Method;
import org.springframework.aop.ThrowsAdvice;
public class ExceptionLog implements ThrowsAdvice {
public void afterThrowing(Method method, Object[] args, Object target,Exception throwable) {
System.out.println("产生异常的方法名称: " + method.getName());
for(Object o:args){
System.out.println("方法的参数: " + o.toString());
}
System.out.println("代理对象: " + target.getClass().getName());
System.out.println("抛出的异常: " + throwable.getMessage()+">>>>>>>"+ throwable.getCause());
System.out.println("异常详细信息: "+throwable.fillInStackTrace());
//省略将异常信息发送给指定邮件的代码
}
}
Spring配置文件内容
<bean id="logAdvice" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>userService</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>exceptionLog</value>
</list>
</property>
</bean>
/**
*以下是输出的信息
**/
进入AOP,当前方法为:query
产生异常的方法名称: query
代理对象: com.mvc.dao.impl.UserDAO$$EnhancerByCGLIB$$1a0673ec
抛出的异常: java.lang.Object cannot be cast to java.util.List>>>>>>>null
异常详细信息: java.lang.ClassCastException: java.lang.Object cannot be cast to java.util.List
java.lang.ClassCastException: java.lang.Object cannot be cast to java.util.List
at com.mvc.aop.ExceptionLog.afterThrowing(ExceptionLog.java:13)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.framework.adapter.ThrowsAdviceInterceptor.invokeHandlerMethod(ThrowsAdviceInterceptor.java:144)
at org.springframework.aop.framework.adapter.ThrowsAdviceInterceptor.invoke(ThrowsAdviceInterceptor.java:129)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at com.sun.proxy.$Proxy1.query(Unknown Source)
at com.mvc.web.controller.UserController.query(UserController.java:38)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.servlet.mvc.multiaction.MultiActionController.invokeNamedMethod(MultiActionController.java:471)
at org.springframework.web.servlet.mvc.multiaction.MultiActionController.handleRequestInternal(MultiActionController.java:408)
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:771)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:879)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:600)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1703)
at java.lang.Thread.run(Thread.java:662)2014年5月29日 16:44
4个答案 按时间排序 按投票排序
-
debug跟一下,看下 this.sqlSession.selectList("User.getUserList2"); 查出来的是什么,应该是个Object,不是你需要的List
2014年5月30日 11:21
-
List<User>list=this.sqlSession.selectList("User.getUserList2");
这写法没有错啊,selectList()返回的是List啊!
那就只有一个可能啊!你ibatis里面sql的返回值类型给错了啊!2014年5月30日 10:35
-
看一看 this.sqlSession.selectList("User.getUserList2"); 这个方法的返回类型是什么
2014年5月30日 10:22
-
很明显,你查询出来的是一个Object对象,且此对象不能强转成List对象。虽然List对象是Object的子集,但是并非所有Object都是List。像使用count等统计命令查询出来的结果就不是List对象。
2014年5月29日 17:18
相关推荐
Spring 2.5是Spring框架的一个重要版本,它引入了大量增强的功能,特别是对注解的支持,这使得在Java应用程序中实现依赖注入和面向切面编程(AOP)变得更加简单和直观。在这个基于注解的例子程序中,我们将深入探讨...
使用 Spring AOP 进行方法耗时监测的好处有以下几点: 1. 代码实现简单,易于维护:使用 Spring AOP 可以将耗时监测的逻辑与业务逻辑进行解耦,避免业务逻辑代码的冗余和代码维护难度的提高。 2. 安全性高:使用 ...
1. **Spring AOP**:AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架的一个重要特性,它允许开发者定义“切面”,这些切面可以包含业务逻辑的各个部分,如日志、事务管理等。Spring AOP提供了一种...
spring-aop-1.1.1.jar spring-aop-1.2.6.jar spring-aop-1.2.9.jar spring-aop-2.0.2.jar spring-aop-2.0.6.jar spring-aop-2.0.7.jar spring-aop-2.0.8.jar spring-aop-2.0.jar spring-aop-2.5.1.jar spring-aop-...
标题中的“在自定义Spring AOP中使用EL获取拦截方法的变量值”指的是在Spring的面向切面编程(AOP)中,通过Expression Language(EL,表达式语言)来访问被拦截方法的局部变量值。这通常涉及到Spring的代理机制、...
在上述代码中,我们定义了一个名为`SpringAopLog`的切面类,并通过注解指定了哪些方法会在目标方法执行前后被调用。在`afterReturn`方法中,根据不同的方法名来记录不同的日志信息。 #### 四、总结 通过Spring AOP...
连接点(Joint Point)是程序执行过程中的特定点,通常在Spring AOP中,它代表一个方法的执行。而切入点(Point Cut)是匹配连接点的规则,它定义了一组连接点的集合,可以是一个断言或表达式。Advice与切入点关联,...
Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。这个"spring aop jar 包"包含了实现这一功能所需的类和接口,...
Spring AOP通过构建一个拦截器链(interceptor chain)来实现方法的增强。每个拦截器都有机会在方法调用前后执行自己的逻辑。这种链式结构使得多个增强逻辑可以被灵活地组合在一起。 **5. **Spring AOP配置与使用**...
Spring AOP是Spring框架的一个重要组成部分,它为Java企业级应用提供了切面编程的实现。Spring AOP允许开发者专注于核心业务逻辑,而把非业务相关的关注点,如日志、事务管理等,分离出来,从而提高开发效率和代码可...
Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是Spring框架的一个重要模块,它通过提供声明式的方式来实现面向切面编程,从而简化了应用程序的开发和维护。在Spring AOP中,我们无需深入到每个...
现在,我们来看如何创建一个简单的Spring AOP例子: 1. **定义切面(Aspect)**:切面是包含通知(Advice)和切入点(Pointcut)的类。通知定义了要执行的逻辑,切入点定义了何时执行。例如,我们可以创建一个名为`...
你需要实现`org.springframework.aop.Advisor`接口的子接口`org.aopalliance.intercept.MethodInterceptor`,并提供一个`invoke()`方法。 4. **Throw Advice**:在方法抛出异常后调用,但不包括在方法内部捕获并...
在 Spring AOP 中,`org.springframework.aop.framework.JdkDynamicAopProxy` 类实现了 `InvocationHandler` 接口,当代理对象的方法被调用时,实际会执行 `JdkDynamicAopProxy.invoke()` 方法。这个方法会检查并...
在Spring AOP中,我们使用`@Before`注解来定义一个前置通知。这个注解需要与一个方法关联,该方法将在目标方法执行前被调用。例如: ```java @Aspect public class LoggingAspect { @Before("execution(* ...
开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE...
本篇文章将深入探讨Spring AOP中的5种增强方法,以及如何在实际应用中使用它们。我们将不涉及链接,而是直接在这里详细讲解这些概念。 1. **前置通知(Before Advice)**: 前置通知在目标方法执行之前运行,但不...
在IT领域,Spring框架是一个广泛使用的Java应用框架,它提供了许多功能,包括依赖注入、面向切面编程(AOP)等。"spring-aop-jar"这个主题涉及到Spring框架中的核心组件之一——Spring AOP。这里我们将深入探讨...
接下来,我们通过一个简单的Spring AOP示例来加深对上述概念的理解。假设我们需要在调用某个公共方法前记录日志,我们可以定义一个`BeforeAdvice`,并在目标方法上应用此通知。 ```java package com.example.aop; ...
《深入解析Spring AOP框架——以spring-aop.jar为例》 Spring AOP,全称Aspect Oriented Programming(面向切面编程),是Spring框架的核心部分之一,它为Java开发者提供了强大的面向切面的编程能力。本文将围绕...