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、切面配置

	<!-- 定义aop切面 -->
        <aop:aspectj-autoproxy expose-proxy="true" proxy-target-class="true"/>
        <aop:config>
        	<aop:aspect ref="minstrel">
        		<aop:pointcut expression="execution(* com.spring.knights.*.*(..))" id="embark"/>
        		<aop:before method="singBeforeQuest" pointcut-ref="embark"/>
        		<aop:after method="singAfterQuest" pointcut-ref="embark"/>
        	</aop:aspect>
        </aop:config>



如果没有配置

  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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fjkxyl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值