[b异常信息 exception[/b]
Struts Problem Report
Struts has detected an unhandled exception:
Messages:
com.fanbaobao.presentation.action.system.RoleAction cannot be cast to com.fanbaobao.presentation.action.system.MenuAction
Stacktraces
java.lang.ClassCastException: com.fanbaobao.presentation.action.system.RoleAction cannot be cast to com.fanbaobao.presentation.action.system.MenuAction
com.fanbaobao.presentation.action.system.MenuAction$$FastClassByCGLIB$$57d8df08.invoke()
org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:698)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:631)
com.fanbaobao.presentation.action.system.MenuAction$$EnhancerByCGLIB$$2903043f.queryMenuList()
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:289)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252)
com.fanbaobao.presentation.interceptor.AuthInterceptor.intercept(AuthInterceptor.java:32)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
代码 code:
<action name="addRoleMenu" class="xxx.action.system.RoleAction" method="addRoleMenu">
<param name="operation">-1</param>
<result name="init" type="chain">
<param name="namespace">/system</param>
<param name="actionName">queryMenuList</param>
</result>
</action>
<action name="queryMenuList" class="xxx.action.system.MenuAction" method="queryMenuList">
<result name="success">/system/menu_list.jsp</result>
<result name="operation">/system/role_menu_add.jsp</result>
</action>
相关推荐
4. **连接Struts2和Spring**:在Struts2的配置文件(如`struts.xml`)中,我们需要配置Action类以使用Spring的依赖注入,这样Spring才能识别并应用AOP代理。 在实际的项目中,我们还需要考虑如何处理自定义参数。...
在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点分离,将横切关注点(如日志、事务管理、权限检查等)与核心业务逻辑解耦。AOP的核心概念是切面、通知、连接点、切入点和织入。在...
2. **动态代理**:Spring AOP 的默认代理方式是动态代理,它包括JDK动态代理和CGLIB代理。当目标对象实现了至少一个接口时,Spring将使用JDK的动态代理机制。JDK动态代理通过实现InvocationHandler接口,并在运行时...
Spring AOP支持不同的代理策略,包括JDK动态代理和CGLIB代理。如果被代理的类没有实现接口,Spring AOP会采用CGLIB来生成代理对象。CGLIB(Code Generation Library)是一个开源的代码生成库,它允许运行时在内存中...
5. **配置代理**:Spring会根据目标对象是否实现了接口来决定使用JDK动态代理还是CGLIB代理。如果目标对象实现了接口,Spring会选择JDK动态代理。动态代理类会继承自`java.lang.reflect.Proxy`,并实现目标对象的...
在Spring AOP(面向切面编程)中,CGLIB是一个重要的动态代理库,它用于在运行时创建子类以实现对目标对象的代理。CGLIB是针对那些不支持接口代理(例如Java中的final类)的情况而设计的。下面我们将深入探讨Spring ...
在 Spring 中,AOP 的实现主要依赖于代理模式,有两种代理方式:JDK 动态代理和 CGLIB 动态代理。 JDK 动态代理是基于接口的,它要求被代理的目标对象必须实现至少一个接口。Spring 使用 `java.lang.reflect.Proxy`...
在Spring AOP中,有两种主要的实现方式:代理模式和CGLIB。代理模式是基于接口的,当目标对象实现了接口时,Spring会创建一个与该接口匹配的代理对象,通过代理对象来执行增强的逻辑。而CGLIB(Code Generation ...
Spring 框架中 JDK 动态代理和 CGLIB 动态代理是 Spring AOP 中一个非常重要的知识点。Spring AOP 框架会根据实际情况选择使用 JDK 的动态代理还是 CGLIB 的动态代理。 JDK 动态代理是 Java 自带的动态代理机制,它...
需要注意的是,上述代码只是简单模拟,实际上Spring AOP的CGLIB代理可能涉及更复杂的逻辑,包括但不限于代理链的处理、事务上下文的管理等。 总结来说,通过模拟Spring的CGLIB代理,我们可以更深入地理解AOP的实现...
总的来说,Spring AOP通过代理和通知机制,实现了横切关注点的模块化,使得业务逻辑与系统服务(如日志、事务等)解耦,提高了代码的可读性和可维护性。同时,引介功能进一步增强了切面的功能,可以为对象动态地添加...
标题中的"spring-cglib-repack-3.2.5.jar"和"spring-objenesis-repack-2.6.jar"是Spring框架在运行时依赖的两个关键库,它们主要涉及到动态代理和对象创建的优化。 1. **CGLIB(Code Generation Library)**: ...
"spring-objenesis-repack-2.6.jar"和"spring-objenesis-repack-2.5.1.jar"是Spring对Objenesis的不同版本,它们用于支持Spring框架中的某些特定功能,如Spring的测试框架或者AOP代理的创建。 在阅读Spring源码时,...
2. **CGLIB动态代理**:如果目标类没有实现接口,Spring会使用CGLIB库创建一个目标类的子类,子类覆盖目标类的方法并在方法调用前后插入通知。CGLIB代理提供了更广泛的应用场景,但相比JDK动态代理,它的性能稍差。 ...
2. 易于使用:Spring框架已经封装了CGLIB的使用,开发者通常不需要直接与CGLIB库交互。 `spring-objenesis-repack-2.5.1.jar`则是Objenesis库的重新打包版本。Objenesis是一个轻量级的Java库,用于在没有执行构造...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理、安全性等。本示例将简要介绍如何在Spring应用中实现AOP,通过实际的...
在这个问题中,我们遇到了两个关键的jar包:`spring-cglib-repack-3.2.0.jar`和`spring-objenesis-repack-2.1.jar`。这两个jar包对于理解Spring框架的工作原理以及它们在实际应用中的作用至关重要。 首先,`spring-...
综上所述,这个项目实例提供了一个完整的SSM(Struts2、Spring、MyBatis)集成应用,并结合了AJAX和AOP技术,对于理解Java Web开发的常用框架和最佳实践具有很高的学习价值。开发者可以通过研究这个项目,深入理解...
在Spring框架中,CGLIB被广泛用于AOP(面向切面编程)代理。当目标对象不支持接口或者为了提高性能时,Spring会使用CGLIB代理来创建代理对象。`spring-cglib-repack-3.2.6.jar` 包含了CGLIB库的重新打包版本,可能包含...
在这个"spring和struts的整合-aop的使用"主题中,我们将深入探讨如何将Spring与Struts2集成,并利用Spring的AOP实现日志记录。 首先,整合Spring和Struts2的关键在于配置。通常,我们需要在Struts2的配置文件...