AOP 同类方法调用无法进入切面

在做项目的时候遇到这样一个问题,需要在service层进行动态数据源的切换,因此,在service层定义了一个切面,只要方法进入我就判断参数,通过一个参数来进行数据源的切换,但是后来发现在同一个类中进行方法的调用的时候,切面就进不去了。

话不多说,代码是最好的语言:

1、切面类

public class Minstrel {
	/**
	 * 切面开始方法
	 */
	public void singBeforeQuest(){
		System.out.println("Minstrel....singBeforeQuest....begain");
	}
	/**
	 * 界面的结束方法
	 */
	public void singAfterQuest(){
		System.out.println("Minstrel....singAfterQuest....after");
	}
	
	public void destoryName(){
		System.out.println("Minstrel....destoryName....going");
	}
}

2、方法调用类

public class BraveKnight {
	private Quest quest;
	//构造函数
	public BraveKnight(Quest quest){
		this.quest = quest;
	}
	//无参构造函数
	public BraveKnight(){
	}
	//需要测试的方法
	public void embarkOnQuest(){
		quest.embark();
		
	}
	public void test(){
		BraveKnight aop = (BraveKnight) AopContext.currentProxy();
		aop.test1();
		aop.embarkOnQuest();
	}
	public void test1(){
		BraveKnight aop = (BraveKnight) AopContext.currentProxy();
		aop.embarkOnQuest();
	}
	public void destoryName(){
		System.out.println("Quest...............destoryName....................going");
	}
}

3、切面配置

	
        
        
        	
        		
        		
        		
        	
        



如果没有配置

  1. <aop:aspectj-autoproxy proxy-target-class="true"expose-proxy="true"/>  
 就会报

java.lang.IllegalStateException: Cannot find current proxy: Set 'exposeProxy' property on Advised to 'true' to make it available. 


相关信息参考:http://blog.csdn.net/z69183787/article/details/45622821


此处要着重注意:AopContext


你可能感兴趣的:(spring)