AspectJ介绍及Pointcut注解应用
1、@AspectJ的风格类似纯java注解的普通java类。
2、Spring可以使用AspectJ来做切入点解析。
3、AOP的运行时仍旧是纯的SpringAOP,对AspectJ的编译器或者织入无依赖性。
Spring中配置@AspectJ
1、对@AspectJ支持可以使用XML或者Java注解类型的配置(@EnableAspectJAutoProxy使用AspectJ进行自动代理)
2、前提:确保AspectJ的aspectjweaver.jar库包含在应用程序(版本1.6.8或更高版本)的classpath中,以Spring4.0.5为基准的,其他版本可能不一样(可以根据具体情况查找Spring具体文档)。
aspect注解的具体使用
1、@AspectJ切面使用@Aspect注解配置,拥有@Aspect的任何bean将被Spring自动识别并应用。
2、@Aspect注解的类可以有方法和字段,他们也可能包括切入点(pointcut),通知(Advice)和引入(introduction)声明。
3、@Aspect注解是不能够通过类路径自动检测发现的,所以需要配合使用@Component注释或者在xml配置bean(@Aspect注解的类配置在xml中)。
4、一个类中的@Aspect注解标识它为一个切面,并且将自己从自动代理中排出。
如何定义一个切入点
1、一个切入点通过一个普通的方法定义来提供,并且切入点表达式使用@Pointcut注解,方法返回类型必须为void
2、定义一个名为'anyOldTransfer',这个切入点将匹配任何名为“transfer”的方法的执行。
切入点支持哪些定义方式
组合Pointcut
1、切入点表达式可以通过&&、||和!进行组合,也可以通过名字引用切入点表达式。
2、通过组合,可以建立更加复杂的切入点表达式。
如何定义良好的pointcuts
1、AspectJ是编译期的AOP
2、检查代码并匹配连接点与切入点的代价是昂贵的。
3、一个好的切入点应该包括以下几点
【a】选择特定类型的连接点,如:execution,get,set,call,handler。
【b】确定连接点范围,如:within,withincode。
【c】匹配上下文信息,如:this,target,@annotation。
定义良好的pointcuts
AspectJ是编译期的AOP
检查代码并匹配连接点与切入点的代价是昂贵的
一个好的切入点应该包括一下几点
3.1. 选择特定类型的连接点,如,execution,get,set,call,handler
3.2确定连接点范围,如:within,withincode
3.3匹配上下文信息,如:this,target,@annotation
定义良好的Pointcuts
Supported Pointcut Designators
pointcut
1.一个切入点通过一个普通的方法定义来提供,并且切入点表达式使用@Pointcut注解,方法返回类型必须为void
2.定义一个名为‘anyOldTransfer’,这个切入点将匹配任何名为“transfer”的方法的执行
@Aspect注解是不能够通过类路径自动检测发现的 ,所以需要配合使用@Component注释或者在xml配置bean
一个类中的@Aspect注解标识它为一个切面,并且将自己从自动代理中排除
aspect
@AspectJ切面使用@Aspect注解配置,拥有@Aspect的任何bean将被Spring自动识别并应用
用@Aspect注解的类可以有方法和字段,他们也可能包括切入点(pointcut),通知(Advice)和引入(introduction)声明
@Aspect注解是不能够通过类路径自动检测发现的 ,所以需要配合使用@Component注释或者在xml配置bean
切入点匹配项
7-1 aspectj介绍及pointcut注解,笔记引用
AspectJ介绍及Pointcut注解应用
1、@AspectJ的风格类似纯java注解的普通java类。
2、Spring可以使用AspectJ来做切入点解析。
3、AOP的运行时仍旧是纯的SpringAOP,对AspectJ的编译器或者织入无依赖性。
Spring中配置@AspectJ
1、对@AspectJ支持可以使用XML或者Java注解类型的配置(@EnableAspectJAutoProxy使用AspectJ进行自动代理)
2、前提:确保AspectJ的aspectjweaver.jar库包含在应用程序(版本1.6.8或更高版本)的classpath中,以Spring4.0.5为基准的,其他版本可能不一样(可以根据具体情况查找Spring具体文档)。
aspect注解的具体使用
1、@AspectJ切面使用@Aspect注解配置,拥有@Aspect的任何bean将被Spring自动识别并应用。
2、@Aspect注解的类可以有方法和字段,他们也可能包括切入点(pointcut),通知(Advice)和引入(introduction)声明。
3、@Aspect注解是不能够通过类路径自动检测发现的,所以需要配合使用@Component注释或者在xml配置bean(@Aspect注解的类配置在xml中)。
4、一个类中的@Aspect注解标识它为一个切面,并且将自己从自动代理中排出。
如何定义一个切入点
1、一个切入点通过一个普通的方法定义来提供,并且切入点表达式使用@Pointcut注解,方法返回类型必须为void
2、定义一个名为'anyOldTransfer',这个切入点将匹配任何名为“transfer”的方法的执行。
切入点支持哪些定义方式
组合Pointcut
1、切入点表达式可以通过&&、||和!进行组合,也可以通过名字引用切入点表达式。
2、通过组合,可以建立更加复杂的切入点表达式。
如何定义良好的pointcuts
1、AspectJ是编译期的AOP
2、检查代码并匹配连接点与切入点的代价是昂贵的。
3、一个好的切入点应该包括以下几点
【a】选择特定类型的连接点,如:execution,get,set,call,handler。
【b】确定连接点范围,如:within,withincode。
【c】匹配上下文信息,如:this,target,@annotation。
如何定义好的切入点
定义良好的pointcuts
Spring中配置@AspectJ
切入点表达式的组合:尽量清晰明了简单,是对方法名的组合
@pointcut注解使用方法
aspect注解使用
aspect注解使用注意事项
AspectJ的两种配置方式
1、组合pointcut
2、定义良好的pointcut
3、Supported Pointcut Designators
AspectJ定义好的pointcuts
@Aspect注解拥有xml aop配置的所有功能
定义良好的pointcuts
1)AspectJ是编译期的AOP
2)检查代码并匹配连接点与切入点的代价是昂贵的
3)一个好的切入点应该包括以下几点
a)选择特定类型的连接点,如:execution、get、set、call、handler
b)确定连接点范围,如:within、withincode
c)匹配上下文信息,如:this、target、@annotation
定义良好的Pointcuts
组合Pointcut
Supported Pointcut Designators
@Pointcut
@Aspect
@Aspect
Spring中配置@AspectJ
AOP虽然是方法论,但就好像OOP中的Java一样,一些先行者也开发了一套语言来支持AOP。目前用得比较火的就是AspectJ了,它是一种几乎和Java完全一样的语言,而且完全兼容Java(AspectJ应该就是一种扩展Java,但它不是像Groovy[1]那样的拓展。)。当然,除了使用AspectJ特殊的语言外,AspectJ还支持原生的Java,只要加上对应的AspectJ注解就好。所以,使用AspectJ有两种方法:
完全使用AspectJ的语言。这语言一点也不难,和Java几乎一样,也能在AspectJ中调用Java的任何类库。AspectJ只是多了一些关键词罢了。
或者使用纯Java语言开发,然后使用AspectJ注解,简称@AspectJ。