在使用spring aop切面方式拦截方法时,需要使用JoinPoint获取目标方法的参数,这样获得的参数对象中,父类的值是没有被设进去的; 比如:
class A{
private long opusId;
public long getOpusId() { return opusId; }
public void setOpusId(long opusId) { this.opusId = opusId; }
}
class B extends A{
private int replyPlayerId;
public int getReplyPlayerId() {
return replyPlayerId;
}
public void setReplyPlayerId(int replyPlayerId) {
this.replyPlayerId = replyPlayerId;
}
}
function void M1(A a){
...
}
function void M2(B b){
...
}
拦截M1,使用JoinPoint.getArgs()获取目标方法的参数,可以获得传入的值;
但是拦截M2,使用JoinPoint.getArgs()获取目标方法的参数,可以获得传入的值时,只能获得b本身的replyPlayerId值;而不能获得opusId的值;
这个不知道什么原因,获得不到父类的值。只能改代码,拷贝一个A类,在此基础上加一个replyPlayerId属性。
总之,JoinPoint.getArgs()获取目标方法的参数时,不能获得参数父类的值;
相关推荐
Spring源码中最难的问题之一是循环依赖问题,当Spring AOP遇上循环依赖时,该如何解决? Spring通过三级缓存机制解决循环依赖的问题。 在Spring中,bean的实例化过程中,会先尝试从三级缓存中获取bean,这也是...
在使用反射实现AOP动态代理时,我们也需要注意一些问题。例如,由于代理类是在运行时动态创建的,这可能会影响程序的性能,特别是在频繁调用代理方法的情况下。因此,在实际开发中,需要根据应用场景的性能要求和...
- **SpringAOP.avi**:可能是一个视频教程,详细讲解了Spring AOP的概念和实践。 - **SpringAOP.doc**:可能是文档教程,包含了详细的步骤和示例代码。 - **SpringAOP_src.rar**:源代码示例,供你参考和实践。 - **...
2. **定义切面**:创建一个Spring AOP切面,这个切面将包含一个或多个通知(advice),用于拦截特定的数据库操作。例如,我们可以创建一个`@Before`通知,检查方法的注解或方法名,以判断是读操作还是写操作。 3. *...
在实际的Spring配置中,我们需要定义一个切面类,然后在类上使用`@Aspect`注解。在类中,我们创建带有通知注解的方法。此外,还需要在Spring配置文件中启用AOP代理,并将切面类注册到Spring容器中。对于基于注解的...
### Spring AOP 实现流程日志跟踪 #### 一、背景与目的 在现代软件开发过程中,为了...然而,需要注意的是,AOP虽然带来了诸多好处,但也存在一定的劣势,如事务一致性的问题,这需要开发者在实际应用中加以考虑。
Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。AOP的主要目的是将关注点分离,使得业务逻辑与系统...
Spring AOP是Spring框架的一个重要特性,它允许开发者创建具有横切关注点的模块,如日志记录、事务管理等。这些关注点可以被声明性地应用到多个对象上,而无需修改这些对象的代码。Spring AOP通过动态代理实现,有两...
aspectj-1.7.4.jar是AspectJ库的一部分,AspectJ是一个全面的面向切面编程(AOP)系统,它扩展了Java语言,提供了强大的静态和动态编织功能。AspectJ的静态编织允许在编译时将切面代码整合到目标类中,而动态编织则在...
1. **切面(Aspect)**:一个关注点的模块化,例如事务管理就是一个切面。在Spring AOP中,切面由`@Aspect`注解的类定义。 2. **连接点(Join Point)**:程序执行过程中的某个特定点,如方法调用、异常处理等。 3...
在Spring AOP中,切面通常由一个或多个通知(advises)和一个或多个切点(pointcuts)定义。 ### **通知(Advice)** 通知是在特定连接点执行的代码,它代表了切面的一个行为。Spring AOP支持五种不同类型的的通知...
- **基于接口的动态代理**:如果目标类实现了接口,Spring会使用JDK的动态代理机制,生成一个实现了相同接口的代理类,代理类在调用实际方法前/后执行通知。 - **基于类的动态代理(CGLIB)**:如果目标类没有实现...
Spring AOP通过构建一个拦截器链(interceptor chain)来实现方法的增强。每个拦截器都有机会在方法调用前后执行自己的逻辑。这种链式结构使得多个增强逻辑可以被灵活地组合在一起。 **5. **Spring AOP配置与使用**...
总结来说,Spring AOP是Spring框架的一个强大特性,通过它可以实现横切关注点的模块化,提高代码的复用性和可维护性。这个压缩包提供的jar包是实现Spring AOP和MyBatis集成的关键组件,正确导入并配置这些库,能够...
5. 注意切面的执行顺序,避免因顺序不当导致的问题。 通过深入理解和熟练应用Spring AOP,开发者可以有效地提升代码的模块化程度,降低系统复杂度,提高开发效率。学习并掌握Spring AOP对于任何Java开发者来说都是...
在Spring 3.2版本中,AOP(面向切面编程)作为一个重要的功能模块,用于实现代码的解耦和模块化。然而,该版本的Spring核心库并不包含所有必要的第三方库来完整支持AOP功能,因此需要额外引入一些jar包。这些jar包包...
请注意,尽管本示例没有使用注解,Spring AOP也支持使用注解进行更简洁的配置。例如,可以使用`@Aspect`、`@Before`、`@Pointcut`等注解来定义切面、通知和切点。不过,对于初学者来说,理解XML配置可以帮助更好地...
提供的`MySpring`可能是一个自定义的Spring配置或工具类,它可能包含了设置事务管理器、扫描带有`@Transactional`注解的bean等配置。使用时,只需将`MySpring`引入到Spring应用上下文中,即可启动Spring AOP和事务...
AspectJ是一个独立的AOP框架,它提供了自己的语法,Spring可以与其集成来实现AOP功能。 使用AspectJ注解方式实现AOP操作时,首先需要在项目中引入AOP相关依赖。然后,可以通过定义一个增强类,并在该类上添加@...