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 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,一切都正常。。。求帮助!

解决方案

你这段代码有问题!

时间: 2024-12-03 17:25:32

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

反射-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

初学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(Meth

Spring Framework中的AOP编程之入门篇

编程 作为这个介绍Spring框架中的面向方面编程(Aspect-Oriented Programming,AOP)的系列的第一部分,本文介绍了使您可以使用Spring中的面向方面特性进行快速开发的基础知识.使用跟踪和记录方面(面向方面领域的HelloWorld)作为例子,本文展示了如何使用Spring框架所独有的特性来声明切入点和通知以便应用方面.本系列的第二部分将更深入地介绍如何运用Spring中的所有通知类型和切入点来实现更实用的方面和面向方面设计模式. 本文的目的不是要介绍构成模块化J2

实例讲解Java的Spring框架中的AOP实现_java

简介面向切面编程(AOP)提供另外一种角度来思考程序结构,通过这种方式弥补了面向对象编程(OOP)的不足. 除了类(classes)以外,AOP提供了 切面.切面对关注点进行模块化,例如横切多个类型和对象的事务管理. (这些关注点术语通常称作 横切(crosscutting) 关注点.) Spring的一个关键的组件就是 AOP框架. 尽管如此,Spring IoC容器并不依赖于AOP,这意味着你可以自由选择是否使用AOP,AOP提供强大的中间件解决方案,这使得Spring IoC容器更加完善.

Spring学习笔记之aop动态代理(3)

Spring学习笔记之aop动态代理(3) 1.0 静态代理模式的缺点: 1.在该系统中有多少的dao就的写多少的proxy,麻烦 2.如果目标接口有方法的改动,则proxy也需要改动. PersonDao.java public interface PersonDao { public void savePerson(); } PersonDaoImpl.java public class PersonDaoImpl implements PersonDao{ public void save

Spring中基于aop命名空间的AOP 二(声明一个切面、切入点和通知)

2.声明一个切面 在基于AOP命名空间的Spring AOP中,要声明一个切面,需要使用<aop:config/>的子标签 <aop:aspect>.<aop:aspect>标签有一个ref属性必须被赋值,它用于指定和该切面关联的 受管Bean(backing bean,以后我们都将使用Backing Bean来称呼这样的Bean).正如下例所示,该Bean 对应的java类是一个普通的java类,在该类中定义了切面的通知方法.此外,<aop:aspect>

Spring中基于aop命名空间的AOP 一(一点准备工作和一个例子)

在某些时候,我们工程中使用的JDK 不一定就是1.5 以上,也就是说可能不支持Annotation 注解,这时自然也就不能使用@AspectJ 注解驱动的AOP 了,那么如果我们仍然想使用AspectJ 灵活的切入点表达式,那么该如何呢?Spring 为我们提供了基于xml schematic 的aop 命名空间,它的使用方式和@AspectJ 注解类似,不同的是配置信息从注解中转移到了Spring 配置文件中.在这里,我们将详细介绍如何使用Spring 提供的<aop:config/> 标签

Java Spring的IoC和AOP的知识点速记

Spring简介 Spring解决的最核心的问题就是把对象之间的依赖关系转为用配置文件来管理,这个是通过Spring的依赖注入机制实现的. Spring Bean装配 1. IOC的概念以及在Spring容器中如何进行IOC的操作. IOC:Inversion of Control,控制反转.在Java开发中,IOC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制,这称为控制反转,就是被调用类的实例由原先的调用类控制创建.销毁现在转变成由Spring的容器管理. 2. Spring容器

spring使用注解实现aop

问题描述 我想用spring的注解实现aop对某些类的某几个方法进行拦截!例如我只拦截save和update两个方法!@Pointcut("execution(* com.test..*(..)")这样的表达式似乎不行!只能拦截所有方法和某一个方法!应该用什么方法来实现我的需求?必须是使用注解的! 解决方案 @Pointcut("execution(* com.test.save*(..)) || execution(* com.test.update*(..))"