Spring 3.x企业应用开发实战(11)----基于@AspectJ配置切面
1、@AspectJ的JDK必须是JDK 5.0+
基于@AspectJ配置切面
@AspectJ采用注解描述切点、增强,两者只是表达式方式不同,效果相同。
@AspectJ语法基础-----切点表达式函数
AspectJ使用。Spring支持9个@AspectJ切点表达式函数,他们用不同的方式描述目标类的连接点,根据描述对象不同,可以大致分为4中类型。
#1、方法切点函数:通过描述目标类方法信息定义连接点。
#2、方法入参切点函数:通过描述目标类方法入参的信息定义连接点。
#3、目标类切点函数:通过描述目标类类型信息定义连接点。
#4、代理类切点函数:通过描述目标类的代理类的信息定义连接点。
切点函数:
类别
函数
入参
说明
#1
execution()
方法匹配模式串
表示满足某一匹配模式的所有目标类方法连接点,如execution(*greetTo(..))
#1
@annotation
方法注解类名
表示标注了特定注解的目标方法连接点,如@annotation(com.smart.anno.NeedTest)表示任何标注了@NeedTest注解的目标类方法
#2
args()
类名
通过判别目标类方法行入象的型定指定接,如args(com.smart.Waiter)表示所有有且有一按型匹配于Waiter入的方法
#2
@args()
型注解名
通判目方法行入象的是否注特定注解指定接,如@args(com.smart.Monitorable)表示任何的一目方法:它有一入且入象的注@Monitor注解
#3
within()
target()
@within()
@target()
#4
this()
名
假如代理按型匹配于指定,被代理的目所有接匹配切。
函入中使用通配符:
$1、* 匹配任意字符,但它只能匹配上下文中的一元素
$2、..匹配任意字符,可以匹配上下文中的多元素,但在表示,必和*合使用,在表示入使用。
$3、+ 表示按型匹配指定的所有,必跟在名後面,如com.smart.Car+
一个简单的实例:
Waiter接口
package com.smart.aspectj;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringAspectJTest {@Testpublic void testAspectJ(){String configPath="com/smart/aspectj/beans.xml";ApplicationContext ctx=new ClassPathXmlApplicationContext(configPath);Waiter waiter=(Waiter)ctx.getBean("waiter");waiter.greetTo("John");waiter.serveTo("Tom");}}得出结果:
How are you!
Greet to John...
Serving to Tom...
Enjoy yourself!!