spring aop 同一个bean中方法调用方法

原创 2016年08月30日 17:25:42
  1. public class SomeBean {  
  2.     public void methodA() {  
  3.         this.methodB();  
  4.     }  
  5.   
  6.     public void methodB() {  
  7.         System.out.println("methodB executing...");  
  8.     }  
  9. }  
  10. public class TestBean  
  11. {  
  12.     private SomeBean someBean;  
  13.     public void outterMethod() {  
  14.         someBean.methodA();  
  15.     }  
  16.     public void outterMethod2() {  
  17.         someBean.methodB();  
  18.     }  
  19.     //getter&setter 略...  

  1. }  

上述两个类被定义成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代理机制以及方法调用在同一个类的另一个方法的问题

ref:http://my.oschina.net/mushui/blog/161387 Spring AOP使用JDK动态代理或者CGLIB来为目标对象创建代理。(建议优先使用JDK的动态代理...
  • booooooooooooooooooo
  • booooooooooooooooooo
  • 2014年01月23日 00:49
  • 1377

spring aop 同一个类中一个方法调用另一个方法,拦截不到被调用的方法

转自:http://huqilong.blog.51cto.com/53638/732088            在开发基于 Spring 的应用的过程中碰到了一个让我困惑了好久的...
  • jisuanjixuezi
  • jisuanjixuezi
  • 2013年04月12日 19:25
  • 1988

如何获取spring中存放的各个bean及设置某个bean的自动启动方法

1 接口介绍 ApplicationContextAware与ApplicationContext 当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得A...
  • zhousenshan
  • zhousenshan
  • 2016年04月22日 16:15
  • 647

Spring配置bean的方法(工厂方法和Factorybean)

通过工厂方法配置bean      通过调用静态工厂方法创建bean     通过静态工厂方法创建bean是将对象创建的过程封装到静态方法中。当客户端需要对象时,只需要简单地调用静态方法,而不关心...
  • qq_20545159
  • qq_20545159
  • 2015年09月05日 20:13
  • 309

Spring AOP之高级应用--在已有的bean中引入行为

问题: 有时候有一组共享公共行为类。在OOP中,它们必须扩展相同的基类或者实现相同的接口。 此外,Java的单继承机制仅允许一个类最多扩展一个基类。所以,不能同时从多个实现类中继承行为。 解决方案: ...
  • zhoupeng_love
  • zhoupeng_love
  • 2014年03月20日 14:09
  • 2093

在同一个类中调用另一个方法没有触发 Spring AOP 的问题

https://segmentfault.com/a/1190000008379179 起因 考虑如下一个例子: @Target(value = {ElementType...
  • casablancaagnes_3sdf
  • casablancaagnes_3sdf
  • 2017年08月16日 22:43
  • 215

根据参数动态加载bean(一个接口多个实现的调用方法)

spring实现动态加载javabean方法,一个接口多个实现,根据参数不同加载不同的实现类。...
  • binbinyouli301
  • binbinyouli301
  • 2017年01月09日 14:40
  • 1103

Spring的AOP使用实例

本文主要通过一些实例,一步步逐渐完善一个AOP的例子: 1.简单的AOP日志实现-某方法之前的前后记录日志; 2.简单的AOP日志实现-需要记录方法的运行时间; 3.简单的AOP日志...
  • u010853261
  • u010853261
  • 2017年01月24日 14:53
  • 2185

Spring aop--几种不同的使用方式

最近听老师讲关于AOP关于容器的课,突然觉得之前对aop的理解都不是很到位,先不说理解就是应用都很少,最近也写了几篇关于AOP的博客,都是一些简单的demo,今天在这里再说一下关于Spring A...
  • jly4758
  • jly4758
  • 2015年05月31日 17:48
  • 7988

Spring在代码中获取bean的几种方式

如何取得Spring管理的bean  (请用第3种方法): 1、servlet方式加载时, 【web.xml】 Xml代码 servlet>   servlet-name>springM...
  • zsw12013
  • zsw12013
  • 2016年06月17日 17:44
  • 16223
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:spring aop 同一个bean中方法调用方法
举报原因:
原因补充:

(最多只允许输入30个字)