`
默翁1
  • 浏览: 26864 次
社区版块
存档分类
最新评论

aspectj基本知识点

 
阅读更多

关于aspectj的基本知识点:


在使用@AspectJ 之前,首先必须使用JDK5.0以上的版本。
Spring支持九中@AspectJ切点表达式函数,他们使用不同的方式描述了目标类的连接点,根据描述对象的不同,可以大致分为四类,分别是:
1:方法切点函数,通过描述目标类方法信息定义连接点。execution(),@annotation()
2:方法入参切点函数,通过描述目标类方法入参的信息定义连接点。args() @args()
3:目标代理类切点函数:通过描述目标类型信息定义连接点。 within() @within() target()
4:代理类切点函数通过描述目标类的代理类的信息定义连接点。@target() this()

@AspectJ支持三种通配符:
*  :匹配任意字符,但它只能匹配上下文中的一个元素。
..  :匹配任意字符,可以匹配上下文中的多个元素,参数的代表
+  :  匹配指定类的所有类,必须跟在类后面,如:com.tz.aspectj.IUserService+
代表继承和扩展指定类的所有类,同时包括指定类本身。
 
@AspectJ函数按其是否支持通配符及支持的程度可分为以下3类:
 
1:支持所有通配符的有:execution(),within(),:within(com.tz.user.*)
2:仅支持+通配符的有:args(),this(),target(),args(com.tz.User+)
3:不支持通配符的有:@args,@within(),@target(),@annotation()
@AspectJ提供了三种逻辑运算符分别是:
&&  :与操作,相当于切点的交集运算,它可以用and替换。如:within(com.user.*)and args(String)表示com.user包下所有的类(当前包以及子孙包)拥有一个String入参的方法
||   :或操作。相当于切点的并集运算,他可以用or替换。如:within(com.user.*)and args(String)表示在com.user包下所有的类(当前包以及子孙包)的方法或者所有拥有一个String入参的方法
!:非操作,相当于切点反集运算,它可以用not替换,就是一个过滤而已。入:
within(com.user.*) and not args(String) 表示com.user包下所有的类的方法排除只有一个入参为String方法。
 
如果not位于切点开头,必须在前面加入一个空格 [空格] not within(com.user.*)

增强类型
描述
@Before
相当于:BeforeAdvice前置通知
@AfterReturning
相当于AfterRetruingAdvice后置通知
@Around
相当于:MethodInterceptor环绕通知
@AfterThrowing
相当于ThrowsAdvice异常通知
@After
用于释放资源的时候 Final增强
@DeclareParents
相当于:IntroductionInterceptor引介增强
 

execution属于方法切点函数:
1:方法匹配模式串。                                
2:标识满足某一匹配模式的所有目标类方法连接点,如execetion(* saveUser(..))表示匹配目标类中所有的saveUser()的方法.
格式如下:execution(<修饰符模式>?<返回类模式><方法名模式>(<参数模式>)<异常模式>?)
除了返回类型,方法名模式和参数模式外,其他项都是可选的。
 
a:通过方法前面定义切点:
execution(public * *(..)):
匹配所有目标类的public方法,第一*代表返回类型,第二*代表方法名,而(..)代表任意入参的方法。
execution(* *To(..))
匹配目标中所有以To为后缀的方法。

b:execution(*com.tz.user.IUserService.*(..))
匹配接口IUserService的所有方法,它匹配UserService的所有方法,第一*代表返回任意类型,
execution(*com.tz.user.IUserService+.*)匹配IUserService接口中所有的方法,它是一个增强的拦截匹配。
 
c:通过类包定义切点:在类名模式中,".*"表示包下所有类,而"..*"表示包,子孙包下的所有类。
.  execution(* com.tz.user.*(..))表示包下的所有类的所有方法
.  execution(* com.tz.user..*(..))表示包下所有类,及子孙类的所有方法.
. execution(* com..*.*Dao.find*(..)):表示com包下任何包下类名后缀为Dao的方法,方法名必须以find为前缀的方法.
d:通过方法入参定义切点:
. execution(* find(String,int)):代表匹配任意返回值,以find为方法名,第一个参数是String,第二个参数是int的方法.
 
. execution(* find(String,*))代表匹配任意返回值,以find为方法名,第一个参数是String,第二个参数是任意类型. find(String,int) find(String,double)
 
.execution(* find(String,..))代表第一个入参String,后面可以有任意且没有都.find(String),find(String,int)个数匹配就行了。
 
.execution(* find(Object+))匹配find(String)find(Client)等,但是如果是execution(Object)则只能匹配find(Object);
分享到:
评论

相关推荐

    aspectj的有关知识点

    AspectJ 是一种面向切面编程(AOP)的框架,它允许程序员定义“切面”来封装关注点,这些关注点通常与业务逻辑的核心部分不直接相关,如日志、事务管理或安全性。通过使用 AspectJ,我们可以将这些分散的代码片段...

    AspectJ in Action 2nd Edition

    #### 知识点一:AspectJ概述及特点 - **AspectJ简介**:AspectJ是一种面向切面编程(AOP)语言,它扩展了Java语言,提供了一种更强大的方式来处理那些在传统的面向对象编程中难以管理的“横切关注点”。本书...

    AspectJ_Cookbook_English_edition

    书中的章节涵盖了以下几个主要知识点: 1. **AspectJ基础**:介绍AspectJ的基本元素,包括切面、通知(advice)、连接点(join point)、切点(pointcut)和织入(weaving)。这些概念构成了AspectJ的基础,理解...

    book :aspectj in action

    压缩包内的"Manning@2003 - AspectJ In Action.pdf"是该书的电子版,读者可以从中学习到以下知识点: 1. 面向切面编程的基本理念和历史背景。 2. AspectJ语法和编程模型,包括定义切面、通知类型(before、after、...

    AspectJ程序设计指南

    ### AspectJ程序设计指南知识点概览 #### 一、AspectJ简介与起步 **1.1 概述** - **AspectJ**是一种面向切面编程(AOP)的扩展语言,它扩展了Java语言来支持AOP特性。 - AOP允许程序员定义“切面”(aspect),这些切...

    aspectj.zip

    通过解压并探索这个"aspectj.zip",开发者可以学习到以下关键知识点: 1. **面向切面编程AOP**:理解AOP的概念,知道它是如何解决传统OOP中的横切关注点问题的。 2. **切面**:创建切面,定义切点(Pointcut)和...

    The AspectJ Programming Guide.2003

    ### 重要知识点概览 #### 面向切面编程(AOP) AOP是一种编程范式,它将应用程序的业务逻辑与系统服务分离,以便于维护和复用。AspectJ作为AOP的一种实现,提供了强大的机制来定义和实现这些“切面”。 #### 动态...

    Manning AspectJ in Action.pdf

    书中的内容通常会涵盖以下几个核心知识点: 1. **面向切面编程的基本概念**:讲解AOP的核心思想,包括切面(aspect)、连接点(join point)、通知(advice)、切点(pointcut)和织入(weaving)。这些概念是理解...

    Manning.AspectJ.In.Action

    #### 详细知识点介绍 ### 1. 面向切面编程(AOP)概览 - **定义**:AOP是一种编程范式,旨在通过将程序中的关注点分离来提高模块化程度,使得程序更加清晰易懂。 - **作用**:通过定义切面来处理那些横跨多个类的...

    征服Spring AOP—— @AspectJ

    在压缩包文件"spring-aop-aspectj"中,可能包含了关于Spring AOP和@AspectJ的示例代码或文档,可以帮助你进一步理解和实践这些知识。通过学习和实践,你将能更好地掌握这一强大的工具,从而在你的IT职业生涯中征服...

    aspectj+aspectjrt+aspectjweaver

    在实际开发中,以下是一些使用AspectJ的关键知识点: - **切面(Aspect)**:切面是关注点的模块化,包含了切点(Pointcut)和通知(Advice)。切点定义了在哪些位置(方法、类、包等)应用通知,而通知定义了在...

    Manning - AspectJ in Action切面编程详解-书签文字英文版

    书签版意味着这本书可能包含了一些关键概念或章节的标记,方便读者快速定位到重要的知识点。对于英文版的读者,这将是一个有价值的资源,尤其是对于需要深入研究和查阅特定主题的人来说。 总的来说,《AspectJ in ...

    Manning - AspectJ in Action

    这些知识点是理解AspectJ的关键,它们构成了AOP的基石。通过实际示例,读者将学习到如何定义和应用切面,以及如何精确地控制通知的执行时机。 书中还会深入探讨AspectJ的编译时和运行时织入机制,这两种方式各有优...

    aspectjlib-1.5.3.jar.zip

    1. **AspectJ的基本概念**: - **切面(Aspect)**:是AOP的核心概念,代表了一组相关横切关注点的模块化。例如,日志记录、事务管理等可以视为独立的切面。 - **连接点(Join Point)**:程序执行过程中特定的点...

    AspectJ in Action: Enterprise AOP with Spring Applications

    #### 关键知识点概述 1. **Spring-AspectJ集成:**本书重点介绍了Spring框架与AspectJ相结合的技术优势及其在企业级应用中的强大功能。 2. **面向切面编程(AOP):**深入探讨了AOP的概念、原理及其实现方式,特别是...

    aspectj_in_action_second_edition

    - **基础篇**:介绍AspectJ的基础知识,包括面向切面编程的概念、切点表达式、通知类型等内容。 - **进阶篇**:探讨AspectJ的高级特性,如织入策略、类型安全等方面的知识。 - **实战篇**:提供了一系列实际应用场景...

    AspectJ_in_Action.pdf

    《AspectJ in Action》全面覆盖了AOP和AspectJ的基础知识、核心概念以及高级主题。书中首先介绍了AOP的基本原理,包括切面、连接点、通知、切入点和织入等关键概念,随后通过一系列示例,详细讲解了如何使用AspectJ...

    关于AspectJ的比较简要的PPT

    ### 关于AspectJ的知识点解析 #### 一、AspectJ简介 AspectJ是一种面向切面编程(Aspect-Oriented Programming, AOP)的扩展语言,它通过提供一种新的语法结构来支持AOP特性,使开发者能够更清晰地分离关注点,并在...

    AspectJ 5 quick reference

    ### AspectJ 5 快速参考指南 #### 一、AspectJ 概览 AspectJ 是一种面向切面编程(Aspect-Oriented ...通过掌握这些知识点,开发者能够在实际项目中有效地利用 AspectJ 的功能来增强应用程序的模块化和灵活性。

Global site tag (gtag.js) - Google Analytics