`
liyuandong
  • 浏览: 329374 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring2.0中pointcut的定义

阅读更多

关键字: pointcut的定义

Spring 2.0中,Pointcut的定义包括两个部分:Pointcut表示式(expression)Pointcut签名(signature)。让我们先看看execution表示式的格式:
java 代码
  1. execution(modifier-pattern?
  2.           ret-type-pattern
  3.           declaring-type-pattern?
  4.           name-pattern(param-pattern)
  5.           throws-pattern?)

括号中各个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. //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 2.0 开发参考手册

    6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. ...

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

    主要介绍了详解Spring 框架中切入点 pointcut 表达式的常用写法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    如何使用Spring Boot的@Pointcut注解

    总的来说,@Pointcut注解是Spring Boot AOP中非常有用的一部分,它允许我们轻松地定义切点并应用通知来实现面向切面编程。通过这种方式,我们可以有效地在应用程序中实现横切关注点的功能,提高代码的可维护性和重用...

    SPRING API 2.0.CHM

    Pointcut PointcutAdvisor PointcutComponentDefinition PointcutEntry Pointcuts PoolingConfig PortletApplicationContextUtils PortletApplicationObjectSupport PortletConfigAware ...

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

    好多朋友都不知道spring中的pointcut(切入点)的表达式在xml中是如何使用 and not or 的,小弟特地测试了无数次,终于搞定了

    JavaEE源代码 Spring_Pointcut

    JavaEE源代码 Spring_PointcutJavaEE源代码 Spring_PointcutJavaEE源代码 Spring_PointcutJavaEE源代码 Spring_PointcutJavaEE源代码 Spring_PointcutJavaEE源代码 Spring_PointcutJavaEE源代码 Spring_...

    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 Framewor开发手册

    2. Spring 2.0和 2.5的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 新的bean作用域 2.2.2. 更简单的XML配置 2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件 2.3. ...

    Spring AOP Example – Pointcut , Advisor

    NULL 博文链接:https://tuoxinquyu.iteye.com/blog/1465200

    【Spring AOP】@Aspect结合案例详解(二): @Pointcut使用@within和within

    上文我们已讲完五种通知Advice注解,所以从本文开始介绍@Pointcut切点表达式,虽然Spring AOP的切点表达式尚未 全部实现 @AspectJ 的切点指示符,但是也已经足够多和灵活,本文主要介绍@Pointcut切点表达式中的@...

    spring2.5.chm帮助文档(中文版)

    2. Spring 2.0和 2.5的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 新的bean作用域 2.2.2. 更简单的XML配置 2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件...

    Spring AOP中文教程

    Spring framework是很有前途的AOP技术。...pointcut定义了需要注入advice的位置,通常是某个特定的类的一个public方法。advisor是pointcut和advice的装配器,是将advice注入主程序中预定义位置的代码。

    spring chm文档

    6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. ...

    Spring AOP配置源码

    @Component("userService")等价于在spring配置文件中定义一个&lt;bean id="userService"/&gt; @Resource(name="userDAO")将userDA注入进来 写一个拦截器的类 package com.spring.aop; import org.springframework....

    Spring中文帮助文档

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

    【Spring AOP】@Aspect结合案例详解(一): @Pointcut使用@annotation + 五种通知

    在微服务流行的当下,在使用SpringCloud/Springboot框架开发中,AOP使用的非常广泛,尤其是@Aspect注解方式当属最流行的,不止功能强大,性能也很优秀,还很舒心!所以本系列就结合案例详细介绍@Aspect方式的切面的...

    can't find referenced pointcut

    spring-framework-3.1.1.RELEASE jdk1.7 环境下 can't find referenced pointcut 问题解决 换了对应的jar文件即可 aspectjrt.jar aspectj-1.6.6.jar aspectjweaver.jar

    开源框架 Spring Gossip

    Before Advice After Advice Around Advice Throw Advice Pointcut、Advisor Pointcut 定义了 Advice 的应用时机,在 Spring 中,使用 PointcutAdvisor 将 Pointcut 与 Advice 结合成为一个...

    Spring API

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

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

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

Global site tag (gtag.js) - Google Analytics