`

应用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");//被拦截
	}
}

 

分享到:
评论

相关推荐

    spring-context-3.2.0 spring-core-3.2.0 等齐全的Spring jar包

    9. **spring-aop-3.2.0.RELEASE.jar**:AOP模块实现了面向切面编程,允许开发者定义方法拦截器和切入点表达式,以实现如日志、事务管理等跨切面关注点的分离。 10. **spring-tx-3.2.0.RELEASE.jar**:事务管理模块...

    Spring4Ioc-Aop

    - **AOP** 通过定义切入点、通知和切面来实现横切关注点的分离。 #### 八、配置Bean - **配置形式**:通常使用XML文件来配置Bean,但在现代的Spring开发中,也广泛采用了基于注解的配置方式。 - **Bean的配置方式**...

    spring源码spring-framework-4.3.2.RELEASE

    2. **AOP(Aspect Oriented Programming)**:Spring的AOP模块实现了面向切面编程,允许开发者定义方法拦截器和切入点表达式,用于代码的解耦和增强。`org.springframework.aop`包下包含了AOP的核心实现,如`Advised...

    spring-framework-2.5.6.SEC01

    通过定义切面、通知和切入点表达式,我们可以实现代码的模块化和可重用性。 在2.5.6.SEC01中,Spring的IoC(Inversion of Control)容器负责管理Bean的生命周期和装配。开发者可以通过XML配置或注解声明Bean,容器...

    lijie_study-spring-framework-v5.2.0.RELEASE.zip

    通过定义切面、切入点表达式和通知类型,可以灵活地实现代码的解耦和模块化。 三、MVC(Model-View-Controller)框架 Spring MVC是Spring提供的Web应用开发框架,它简化了构建RESTful服务的过程。在`org.spring...

    spring4.3.9相关jar包文件

    它通过定义切入点和通知来实现切面。 3. **数据访问/集成(Data Access/Integration)**:Spring提供了JDBC抽象层,简化了数据库操作。它还支持ORM(对象关系映射)框架,如Hibernate、MyBatis等,以及JPA(Java ...

    spring-framework-2.0.2-with

    Spring 2.0.2提供了更多的通知类型和更灵活的切入点表达式,让AOP的使用更加得心应手。 再者,Spring 2.0.2对数据访问层进行了重大升级。JDBC抽象层提供了模板方法和DAO支持,使得数据库操作变得更加简洁和安全。...

    spring-framework-4.2.7.RELEASE-dist

    5. **Spring AOP**:这个模块提供了 AOP 功能,允许开发者定义方法拦截器和切入点表达式,实现代码的横切关注点。 6. **Spring Aspects**:提供了与 AspectJ 集成的能力,使开发者能够利用强大的 AOP 语言特性。 7...

    spring-webmvc-struts.jar aspectjweaver.jar

    在Spring框架中,AspectJ被用来实现更细粒度的控制和更灵活的AOP功能,比如在没有源码的情况下对第三方库进行增强。 Spring Web MVC的核心组件包括DispatcherServlet、Controller、Model、View和ViewResolver。...

    spring-analysis-源码.rar

    AOP通过定义切入点和通知来实现横切关注点的封装。 3. **Bean的生命周期** Spring bean有完整的生命周期管理,包括初始化、正常使用和销毁三个阶段。我们可以自定义初始化方法、销毁方法,还可以利用...

    spring_aop1.rar_spring

    8. **Spring AOP的应用场景**:常见的使用AOP的场景包括事务管理、日志记录、性能监控、安全控制等。例如,可以在所有数据库操作前启动一个事务,在操作完成后提交或回滚,这样就可以确保数据一致性。 通过学习并...

    官方源码 spring-framework-5.3.0.zip

    面向切面编程是Spring的重要特性,5.3.0在AOP方面进行了增强,支持更多的切面定义方式,如注解、XML配置以及编程式切面,同时提供了更强大的切入点表达式。 6. **Instrumentation** 仪器化模块主要用于类加载器和...

    spring xml方式配置aop

    2. **定义切入点**:使用`&lt;aop:pointcut&gt;`元素定义切入点表达式,该表达式指定了通知应用的连接点。例如,定义一个切入点,匹配所有在com.example.service包及其子包下的public方法: ```xml &lt;aop:pointcut id=...

    跟我学spring3-源码.

    AOP通过定义切面、通知和切入点来实现代码的解耦。 4. **Spring容器**:Spring框架的核心是IoC容器,它负责创建、管理和装配对象。Spring容器根据配置文件或Java代码中的定义来实例化对象并管理其生命周期。 5. **...

    spring

    - **ControlFlowPointcut**:基于控制流的切入点,允许基于代码的执行流程来确定是否应用通知。 ### 切入点的组合 除了单个的切入点,Spring还支持通过`Pointcuts.union`来组合多个切入点,这意味着可以将两个或更...

    SpringBoot-事务&AOP-黑马程序员学习笔记

    在IT行业中,Spring Boot是一个非常流行的Java开发框架,它简化了Spring应用的初始搭建以及开发过程。本笔记主要关注Spring Boot中的两个核心概念:事务管理和面向切面编程(AOP)。我们将深入探讨这两个主题,理解...

    Spring基础教学视频

    - **切入点**:匹配连接点的断言。 - **织入**:将切面代码插入到连接点的过程。 - **实现方式**:通过Spring的&lt;aop:config&gt;元素或@AspectJ注解实现。 #### 五、Spring MVC - **简介**:Spring MVC是Spring框架...

    spring-配套代码

    3. **Spring AOP**:这一部分将介绍如何创建切面、定义通知(advice)、切入点表达式(pointcut)等,以便实现事务管理、日志记录等跨切面功能。 4. **Spring JDBC** 和 **Spring Data JPA**:Spring 提供了对...

Global site tag (gtag.js) - Google Analytics