初学spring aop 遇到了object is not an instance of declaring class的问题

问题描述

CompareInterceptor类package com.spring.advice; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; public class CompareInterceptor implements MethodInterceptor {@Overridepublic Object invoke(MethodInvocation invocation) throws Throwable { // TODO Auto-generated method stub Object result = null; String sname = invocation.getArguments()[0].toString(); if(sname.equals("forever")){ result = invocation.proceed(); } else{ System.out.println("此学生是:"+sname+",而不是forever"); } return result;}}Test 类package com.spring.test;import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;import com.spring.aop.Istudent;public class Test { public static void main(String args[]){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); Istudent st = (Istudent)context.getBean("student"); st.addStudent("forever"); } }applicationContext.xml<?xml version="1.0" encoding="UTF-8"?> xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><bean id="beforeAdvice" class="com.spring.advice.BeforeAdvice" /><bean id="afterAdvice" class="com.spring.advice.AfterAdvice" /> <bean id="compareInterceptor" class="com.spring.advice.CompareInterceptor" /><bean id="studentTarget" class="com.spring.aop.StudentImpl" /><bean id="student" class="org.springframework.aop.framework.ProxyFactoryBean" > <property name="proxyInterfaces"> <value>com.spring.aop.Istudent</value> </property> <property name="interceptorNames"> <list> <value>beforeAdvice</value> <value>afterAdvice</value> <value>compareInterceptor</value> </list> </property> <property name="target"> <value>studentTarget</value> </property></bean> 只要不是参数不是forever,一切都正常。。。求帮助!

解决方案

把代码贴全一点
解决方案二:
<bean id="student" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> <value>com.spring.aop.Istudent</value> </property> <property name="interceptorNames"> <list> <value>beforeAdvice</value> <value>afterAdvice</value> <value>compareInterceptor</value> <value>studentTarget</value> </list> </property></bean>
解决方案三:
您的语句中 if(sname.equals("forever"))中间的这个forver显得怪怪的,你难道不这么觉得???

时间: 2025-01-28 01:00:43

初学spring aop 遇到了object is not an instance of declaring class的问题的相关文章

spring aop-初学Spring aop ,遇到了object is not an instance of declaring class的问题

问题描述 初学Spring aop ,遇到了object is not an instance of declaring class的问题 CompareInterceptor类 package com.spring.advice;import org.aopalliance.intercept.MethodInterceptor;import org.aopalliance.intercept.MethodInvocation;public class CompareInterceptor i

反射-java.lang.IllegalArgumentException: object is not an instance of declaring class

问题描述 java.lang.IllegalArgumentException: object is not an instance of declaring class 目的:将目标xml的内容解析到一个java对象里边(xml的各个标签有对应的java类,并且有包含关系). NginxCache配置文件: <?xml version="1.0" encoding="utf-8"?> XXXAction/getXXX.rdm XXXBction/get

J2EE中使用Spring AOP框架和EJB组件

j2ee 快速发展的开发人员社区.对各种后端技术(包括JMS.JTA.JDO.Hibernate.iBATIS等等)的支持,以及(更为重要的)非侵入性的轻量级IoC容器和内置的AOP运行时,这些因素使得Spring Framework对于J2EE应用程序开发十分具有吸引力.Spring托管的组件(POJO)可以与EJB共存,并允许使用AOP方法来处理企业应用程序中的横切方面--从监控和审计.缓存及应用程序级的安全性开始,直到处理特定于应用程序的业务需求. 本文将向您介绍Spring的AOP框架在

s2sh框架搭建(基于spring aop)

对于spring aop 是如何管理事务的,请看一下:http://bbs.csdn.net/topics/290021423 1.applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3

Spring AOP框架

AOP正在成为软件开发的下一个圣杯.使用AOP,你可以将处理aspect的代码注入主程序,通常主程序的主要目的并不在于处理这些aspect.AOP可以防止代码混乱. 为了理解AOP如何做到这点,考虑一下记日志的工作.日志本身不太可能是你开发的主程序的主要任务.如果能将"不可见的".通用的日志代码注入主程序中,那该多好啊.AOP可以帮助你做到. Spring framework是很有前途的AOP技术.作为一种非侵略性的,轻型的AOP framework,你无需使用预编译器或其他的元标签,

spring AOP的方式监控方法的执行时间

前段时间有几个同行跟我吐槽说系统响应越来越慢,优化不知道从何入手!今天写写使用spring的aop来实现方法级的执行时间的记录监控,以此来评估方法的性能以及针对性的对已存在的方法进行优化. 对于监控,我们比较关注监控的可靠性和性能,准确,高效,这才能在不影响整体性能的情况下对我们的系统性能有个较准确的认识. 对于spring aop这个我就不多介绍了,网上一搜一大把,使用过spring的人都知道spring的ioc和aop.ioc我们常用,但在我们自己的系统中,aop的使用几乎为零,除了这个监控

Spring源代码解析(七):Spring AOP中对拦截器调用的实现

前面我们分析了Spring AOP实现中得到Proxy对象的过程,下面我们看看在Spring AOP 中拦截器链是怎样被调用的,也就是Proxy模式是怎样起作用的,或者说Spring是怎样为 我们提供AOP功能的: 在JdkDynamicAopProxy中生成Proxy对象的时候: Java代码 return Proxy.newProxyInstance(classLoader, proxiedInterfaces, this); 这里的this参数对应的是InvocationHandler对象

Spring AOP源码分析(五)Spring AOP的Cglib代理

上一篇文章介绍了Spring AOP的JDK动态代理的过程,这一篇文章就要介绍下Spring AOP的Cglib代理过程,仍然是使用上一篇文章的工程案例.  JDK动态代理是由JdkDynamicAopProxy来生成代理对象的,Cglib则是由CglibAopProxy来生成代理对象的.JdkDynamicAopProxy.CglibAopProxy实现了AopProxy接口,如下:  ? 1 2 3 4 5 6 7 public interface AopProxy {       Obje

spring-Java如何在Spring AOP中返回Map

问题描述 Java如何在Spring AOP中返回Map Java如何在Spring AOP中返回Map 各路Java业界大神,请帮小弟一把. 在spring mvc的控制器中,需要频繁返回Map来反应前端网页是否修改成功. 所以我就想做一个AOP控制所有的void delete*()等方法实现自动加上Map类型返回. 以下是未修改代码: @RequestMapping("delete") @ResponseBody public Map delete(Integer id){ Map