读书人

Spring 3.x企业应用开发实战(11)-基于

发布时间: 2013-09-28 10:01:20 作者: rapoo

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!!

读书人网 >ASP

热点推荐