`
wls981
  • 浏览: 137533 次
  • 性别: Icon_minigender_1
  • 来自: 桂林
社区版块
存档分类
最新评论

Spring AOP之类内方法调用

 
阅读更多

示例bean:

public class SomeBean {
	public void methodA() {
		this.methodB();
	}

	public void methodB() {
		System.out.println("methodB executing...");
	}
}
public class TestBean
{
	private SomeBean someBean;
	public void outterMethod() {
		someBean.methodA();
	}
	public void outterMethod2() {
		someBean.methodB();
	}
	//getter&setter 略...
}

 

上述两个类被定义成Spring的bean,并且outterMethod、methodA和methodB都在Spring的aop拦截范围内。

当由外部调用testBean.outterMehtod()方法时,产生了一次AOP拦截,接着outterMehtod调用someBean.methodA()时,又产生了一次AOP拦截,但是当methodA调用methodB时,将不会产生AOP拦截。

也就是说Spring中同一个bean的内部方法之间的调用,是不会产生AOP代理的。

 

基于以上原因,在Spring的事务配置中,如果methodB的每次调用都需要开启一个新的事务的话(propagation设置成REQUIRS_NEW),则当执行outterMethod方法时methodB无法成功开启新事务(因为methodB由methodA调用)。但是当执行outterMethod2方法时,methodB可以成功开启属于自己的新事务。

因此,如果methodB一定要开启一个自己的AOP代理的话,请把methodB放在一个独立的类中并且确保methodB不在类内部被调用。

分享到:
评论

相关推荐

    死磕Spring之AOP篇 - Spring AOP两种代理对象的拦截处理(csdn)————程序.pdf

    在 Spring AOP 中,`org.springframework.aop.framework.JdkDynamicAopProxy` 类实现了 `InvocationHandler` 接口,当代理对象的方法被调用时,实际会执行 `JdkDynamicAopProxy.invoke()` 方法。这个方法会检查并...

    Spring AOP完整例子

    Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许开发者在不修改源代码的情况下,通过插入切面来增强或改变程序的行为。在本教程中,我们将深入探讨Spring AOP的不同使用方法,包括定义切点、通知类型...

    SpringAOP之探秘(动态代理、责任链模式、注解使用)

    你可能会看到如何通过Spring AOP自定义代理类,以及如何利用JDK动态代理和CGLIB来拦截并增强方法的执行。 3. **第六章_cache-demo.zip**:此示例可能进一步扩展了缓存相关的实现,包括不同类型的缓存策略、缓存更新...

    Spring AOP实现机制

    Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许程序员在不修改源代码的情况下,通过“切面”来插入额外的业务逻辑,如日志、事务管理等。AOP的引入极大地提高了代码的可复用性和可维护性。 ### 1. ...

    Spring AOP面向方面编程原理:AOP概念

    Spring AOP主要支持方法调用作为连接点。 3. **通知(Advice)**:在特定的连接点处执行的动作,如before通知(在连接点之前执行),after通知(在连接点之后执行),around通知(环绕连接点执行)等。通知是AOP中...

    Spring AOP之5种增强方法应用范例

    环绕通知是Spring AOP中最强大的一种增强方式,它允许在方法调用前后执行自定义的逻辑,并可以选择是否执行目标方法。环绕通知通过`@Around`注解实现,需要实现`ProceedingJoinPoint`接口的`proceed()`方法来调用...

    反射实现 AOP 动态代理模式(Spring AOP 的实现原理)

    代理类中的sayHello()方法会在调用原Hello类的sayHello()方法之前和之后分别调用Logger类进行日志记录。 这种通过代理模式实现的AOP方法,可以很好地将业务逻辑代码与额外的横切关注点分离,使得代码更加清晰,易于...

    spring-aop实例

    6. **引入(Introduction)**:Spring AOP允许在现有类中添加新的方法或属性,这称为类型引入。这可以用于向旧的非AOP类添加新行为,例如添加日志或事务支持。 7. **配置方式**:Spring AOP可以通过XML配置、注解...

    spring-aop-jar

    "spring-aop-jar"这个主题涉及到Spring框架中的核心组件之一——Spring AOP。这里我们将深入探讨Spring AOP、相关jar文件以及它们在实际开发中的作用。 首先,我们来看一下提供的文件: 1. aopalliance.jar:这是一...

    spring之AOP(动态代理)

    在运行时,JDK动态代理会创建一个新的类,该类实现目标对象的所有接口,并在方法调用时插入自定义的行为(通知)。Spring的`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口是实现JDK动态...

    springAOP配置动态代理实现

    2. **CGLIB动态代理**:如果目标类没有实现接口,Spring会使用CGLIB库创建一个目标类的子类,子类覆盖目标类的方法并在方法调用前后插入通知。CGLIB代理提供了更广泛的应用场景,但相比JDK动态代理,它的性能稍差。 ...

    SpringAOP.rar_springAOP

    使用Spring AOP,可以在方法执行前后自动记录日志,无需在每个方法内部添加日志代码。 3.2 事务管理 Spring AOP提供声明式事务管理,可以在切点上定义事务边界,使得事务处理代码不再侵入业务逻辑。 3.3 安全控制...

    spring aop所需jar包

    - `spring-beans.jar`:Spring Bean的定义和管理,AOP与之紧密关联。 - `spring-core.jar`:Spring的基础库,提供核心工具类和IoC容器。 - `spring-context.jar`:提供了AOP、事件、国际化等功能,是Spring的核心...

    Spring AOP框架实现的结构分析

    最后,本文的目标是从实现的角度来认识 SpringAOP 框架,观察的角度是从外部接口、内部实现、组成部分、执行过程四个方面来认识 SpringAOP 框架。本文的风格是首先列出 AOP 的基本概念,然后介绍框架所涉及到的核心...

    Spring AOP需要的jar

    在Java开发领域,Spring框架是应用最广泛的轻量级框架之一,它提供了众多功能,包括依赖注入、面向切面编程(AOP)等。本文将详细介绍在使用Spring AOP时所需的两个关键jar包:aopalliance-1.0.jar和aspectjweaver-...

    Java spring AOP源码

    此外,Spring AOP不会对最外层的`public`方法内部调用的其他方法也进行拦截,即只停留于代理对象所调用的方法。例如,在下面的例子中: ```java public class B { public void foo1() { System.out.println("foo1...

    Spring AOP

    切点是匹配通知应与之关联的方法或类的模式。Spring AOP支持基于注解和表达式的切点定义。例如,`@Before("execution(* com.example.service.*.*(..))"` 将在`com.example.service`包下所有类的所有方法调用前执行...

    Spring Aop Advise方法(增强方法) 中获取目标方法的参数

    在Spring AOP(面向切面编程)中,Advise(增强方法)是核心概念之一,它允许我们在不修改原有业务代码的情况下,通过拦截器模式来插入额外的功能或行为。这篇博客文章“Spring Aop Advise方法(增强方法) 中获取目标...

    spring aop之链式调用的实现

    Spring AOP 之链式调用的实现 在 software development 中,Aspect-Oriented Programming(AOP)是一种编程范式,旨在将横切关注点从业务逻辑中分离出来,使得代码更加模块化、灵活和可维护。Spring AOP 是一种基于...

    springAOP中文文档

    通过上述两种方式,我们都可以实现对 `UserService` 类的 AOP 增强,从而实现方法调用前后的日志记录。 ### 总结 AOP 是一种强大的编程范式,它通过将横切关注点从业务逻辑中分离出来,提高了代码的可维护性和可...

Global site tag (gtag.js) - Google Analytics