`
反求诸己
  • 浏览: 543158 次
  • 性别: Icon_minigender_1
  • 来自: 湖南娄底
社区版块
存档分类
最新评论

spring 中Pointcut的定义(转)

阅读更多
Spring 2.0中,Pointcut的定义包括两个部分:Pointcut表示式(expression)Pointcut签名(signature)。让我们先看看execution表示式的格式:
括号中各个pattern分别表示修饰符匹配(modifier-pattern?)、返回值匹配(ret-type-pattern)、类路径匹配(declaring-type-pattern?)、方法名匹配(name-pattern)、参数匹配((param-pattern))、异常类型匹配(throws-pattern?),其中后面跟着“?”的是可选项。
在各个pattern中可以使用“*”来表示匹配所有。在(param-pattern)中,可以指定具体的参数类型,多个参数间用“,”隔开,各个也可以用“*”来表示匹配任意类型的参数,如(String)表示匹配一个String参数的方法;(*,String)表示匹配有两个参数的方法,第一个参数可以是任意类型,而第二个参数是String类型;可以用(..)表示零个或多个任意参数。
现在来看看几个例子:
1execution(* *(..))
表示匹配所有方法
2execution(public * com. savage.service.UserService.*(..))
表示匹配com.savage.server.UserService中所有的公有方法
3execution(* com.savage.server..*.*(..))
表示匹配com.savage.server包及其子包下的所有方法
除了execution表示式外,还有withinthistargetargsPointcut表示式。一个Pointcut定义由Pointcut表示式和Pointcut签名组成,例如:
java 代码
  1. execution(modifier-pattern?
  2.           ret-type-pattern
  3.           declaring-type-pattern?
  4.           name-pattern(param-pattern)
  5.           throws-pattern?)

java 代码
  1. //Pointcut表示式
  2. @Pointcut("execution(* com.savage.aop.MessageSender.*(..))")
  3. //Point签名
  4. private void log(){}                              然后要使用所定义的Pointcut时,可以指定Pointcut签名,如
    上面的定义等同与:

java 代码
  1. @Before("og()")

java 代码
  1. @Before("execution(* com.savage.aop.MessageSender.*(..))")

Pointcut定义时,还可以使用&&||!
运算,如:
java 代码
  1. @Pointcut("execution(* com.savage.aop.MessageSender.*(..))")
  2. private void logSender(){}
  3. @Pointcut("execution(* com.savage.aop.MessageReceiver.*(..))")
  4. private void logReceiver(){}
  5. @Pointcut("logSender() || logReceiver()")
  6. private void logMessage(){}

这个例子中,logMessage()将匹配任何MessageSenderMessageReceiver中的任何方法。
还可以将一些公用的Pointcut
放到一个类中,以供整个应用程序使用,如:
java 代码
  1. package com.savage.aop;
  2. import org.aspectj.lang.annotation.*;
  3. public class Pointcuts {
  4.    @Pointcut("execution(* *Message(..))")
  5.    public void logMessage(){}
  6.    @Pointcut("execution(* *Attachment(..))")
  7.    public void logAttachment(){}
  8.    @Pointcut("execution(* *Service.*(..))")
  9.    public void auth(){}
  10. }

在使用这些Pointcut时,指定完整的类名加上Pointcut
签名就可以了,如:
java 代码
  1. package com.savage.aop;
  2. import org.aspectj.lang.JoinPoint;
  3. import org.aspectj.lang.annotation.*;
  4. @Aspect
  5. public class LogBeforeAdvice {
  6.    @Before("com.sagage.aop.Pointcuts.logMessage()")
  7.    public void before(JoinPoint joinPoint) {
  8.       System.out.println("Logging before " + joinPoint.getSignature().getName());
  9.    }
  10. }

当基于XML Sechma实现Advice时,如果Pointcut需要被重用,可以使用<aop:pointcut></aop:pointcut>来声明Pointcut,然后在需要使用这个Pointcut的地方,用pointcut-ref引用就行了,如:
xml 代码
 
  1. <aop:config>  
  2.     <aop:pointcut id="log"   
  3.           expression="execution(* com.savage.simplespring.bean.MessageSender.*(..))"/>  
  4.     <aop:aspect id="logging" ref="logBeforeAdvice">  
  5.         <aop:before pointcut-ref="log" method="before"/>  
  6.         <aop:after-returning pointcut-ref="log" method="afterReturning"/>  
  7.     </aop:aspect>  
  8. </aop:config>  
分享到:
评论

相关推荐

    详解Spring 框架中切入点 pointcut 表达式的常用写法

    在Spring框架中,切入点(pointcut)表达式是AOP(面向切面编程)的核心组成部分,用于定义关注点的精确位置,比如哪些方法应该被拦截。切入点表达式是基于AspectJ语法的,允许开发者精确地指定要拦截的方法。下面将详细...

    Spring AOP Example – Pointcut , Advisor

    通常,我们会创建一个切面类(Aspect),在这个类中定义pointcut和advice,然后在Spring配置文件中声明这个切面,使其生效。例如: ```java @Aspect public class LoggingAspect { @Before("execution(* ...

    如何使用Spring Boot的@Pointcut注解

    在Spring Boot中,@Pointcut注解是AspectJ框架的一部分,用于定义切点(Pointcut)。切点是在应用程序中定义的一组特定方法,当这些方法被执行时,AOP(面向切面编程)的通知(Advices)将被触发。@Pointcut注解允许...

    spring 源码中文注释

    在源码中,`Advisor`、`Pointcut`和`Advice`等接口是描述切面的关键,而`ProxyFactoryBean`或`AspectJAutoProxyCreator`则是创建代理对象的工具。 Spring还提供了大量的模块,如数据访问/集成(DAO)、Web MVC、JMS...

    spring源码中英文注释

    在源码中,`PlatformTransactionManager`和`@Transactional`注解是核心概念,前者定义了事务管理的策略,后者则在方法级别声明事务边界。 5. **Spring MVC**:Spring的Web MVC模块用于构建Web应用程序。`...

    pointcut表达式and or not在xml中配置

    本文将详细介绍如何在Spring的XML配置文件中使用`and`、`or`、`not`逻辑运算符来定义复杂的Pointcut表达式。 #### 二、Pointcut表达式的语法基础 在Spring AOP中,Pointcut表达式通常使用AspectJ的表达式语法。...

    Java EE,Spring基础及应用-切入点(Pointcut)

    在这篇文章中,我们将深入探讨Spring中的切入点(Pointcut)概念,它是AOP的关键组成部分。 首先,我们要明白什么是AOP。AOP是一种编程范式,它允许程序员定义“方面”——关注点的模块化,这些关注点是跨越多个...

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1. @Configurable object的单元测试 6.8.1.2. 多application context情况下的处理 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来...

    spring学习之六“AOP使用spring静态配置文件的实现”

    在Spring的XML配置文件中,我们需要定义`&lt;aop:config&gt;`元素来开启AOP支持,然后创建`&lt;aop:aspect&gt;`元素来定义切面。切点通常通过`&lt;aop:pointcut&gt;`定义,并通过`id`属性给它命名。通知则通过`&lt;aop:before&gt;`、`...

    Spring AOP中文教程

    2. Pointcut:Pointcut定义了Advice应该在何时何地执行。它是一个匹配条件,通常基于方法签名、注解、类名等来定位。在上面的例子中,pointcut可能表示为`BeanImpl`类中的所有public方法,或者更具体地,是`the...

    spring 中文开发手册及案例

    以及如何实现AOP,利用@Aspect和@Pointcut注解定义切面和切入点。 此外,手册可能还会涵盖Spring MVC,这是Spring处理Web请求的主要模块。Spring MVC提供了一种模型-视图-控制器架构,使开发者可以轻松地处理HTTP...

    Spring中的sample

    2. **Bean定义与管理**:在Spring中,业务逻辑组件被称为Bean。开发者可以使用XML、Java配置或者基于注解的方式定义Bean的属性、初始化方法、销毁方法等。 3. **面向切面编程(Aspect-Oriented Programming,AOP)*...

    spring源码分析(1-10)

    Pointcut定义切入点,Advice定义增强处理,Advisor结合两者,Aspect则封装了多个Advisor。 6. **Spring 声明式事务处理**:基于AOP,Spring实现了声明式事务管理。在配置文件中,可以使用@Transactional注解指定...

    spring中文参考文档

    9. **AOP的切点表达式(Pointcut Expression)**:在AOP中,切点表达式用于定义需要拦截的方法。例如,`execution(* com.example.service.*.*(..))`表示拦截com.example.service包下的所有类的所有方法。 10. **...

    Spring中的AOP

    在Spring中,我们可以使用注解或表达式语言(如AspectJ的@Pointcut注解)来定义切点。 5. **织入(Weaving)**:织入是将切面与应用程序的其他部分组合在一起的过程。Spring支持运行时织入和编译时织入,其中运行时...

    Spring示例_Printer_Spring_AOP_Spring_Proxy

    在本示例中,"Spring示例_Printer_Spring_AOP_Spring_Proxy" 主要关注的是Spring框架中的核心概念,特别是AOP(面向切面编程)和代理模式的应用。让我们深入探讨这些知识点。 首先,Spring框架是Java开发中最常用的...

    Spring实现AOP以及AOP的定义

    在Spring中,切面可以由一个Java类定义,这个类包含了切点(Pointcut)、通知(Advice)和织入(Weaving)等元素。 - **切点(Pointcut)**:定义了哪些方法或类会被切面所影响,通常通过匹配特定的方法签名、注解...

    spring中注解的实现原理

    总结来说,Spring中注解的实现原理涉及到元注解的定义、注解处理器的运行、BeanDefinition的生成以及AOP和事务管理的注解处理。这些机制使得Spring能够在不依赖XML的情况下,提供灵活、高效且易于维护的框架功能。...

    Spring-4.3源码

    这是Spring的核心特性之一,允许我们通过配置或注解将对象之间的依赖关系明确地定义出来,而不是硬编码在代码中。在Spring 4.3中,DI的实现更加灵活和高效。例如,`@Autowired`注解可以自动装配bean,而`@Qualifier`...

    Spring中AOP实现EHCache的整合中采用SpringModule结合(二)

    在Spring AOP中,可以使用`@Before`、`@After`、`@Around`等注解来定义切点(Pointcut)。在这个例子中,我们将使用`@Cacheable`注解,它会将方法的返回值存储在缓存中,下次调用相同方法时,直接从缓存中获取结果,...

Global site tag (gtag.js) - Google Analytics