应用Spring AOP(三)-------使用控制流切入点

        如果只想拦截在某种情况下调用的方法,可以使用Spring AOP提供的ControlFlowPointcut来完成这个功能。比如,只有在MainTest类中的aaMethod方法中调用的目标类的方法才会被拦截,其它地方调用的目标类的方法将不会被拦截。

        示例如下,应用上一篇日志的前置通知,不同就是这里应用ControlFlowPointcut,而上一篇日志应用了一个自定义的继承了NameMatchMethodPointcut的MyPointcut类。

本例相关的applicationContext.xml文件中的内容:

<!-- 定义前置通知 -->
    <bean id="beforeLogAdvice" class="com.aop.BeforeLogAdvice"></bean>
    <bean id="controlFlowPointcut" class="org.springframework.aop.support.ControlFlowPointcut">
      <!-- 构造函数的参数 -->
      <constructor-arg index="0">
        <value>com.test.MainTest</value>
      </constructor-arg>
      <constructor-arg index="1">
        <value>aaMethod</value>
      </constructor-arg>
    </bean>
    <bean id="myAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
      <property name="pointcut">
          <ref local="controlFlowPointcut"/>
      </property>
      <property name="advice">
          <ref local="beforeLogAdvice"/>
      </property>
    </bean>

 beforeLogAdvice还是以前那个前置通知,DefaultPointcutAdvisor跟上一篇日志中的用法一样。controlFlowPointcut的bean里面,第一个构造函数参数就是拦截的目标类,第二个构造函数参数就是要拦截的方法名,也就的意思就是说只拦截com.test.MainTest下的aaMethod方法中调用的UserService类的所有方法。

 

MainTest测试类代码:

package com.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.service.IUserService;

public class MainTest {
	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext(
				"applicationContext.xml");
		IUserService userService = (IUserService) context.getBean("myProxy");

		userService.addUser("ton", 56); //不会被拦截
		userService.deleteUser("ton");//不会被拦截
		
		aaMethod(userService);
	}
	public static void aaMethod(IUserService userService){
		userService.addUser("ton2", 56);//被拦截
		userService.deleteUser("Alex");//被拦截
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值