您的位置:首页 > 编程语言 > ASP

spring中AspectJ(16)

2016-01-18 13:08 543 查看

2016/1/18 11:44:08

1.AspectJ

@AspectJ的风格类似纯Java注解的普通Java类

Spring可以使用AspectJ来做切入点解析

AOP的运行时仍旧是纯的Spring AOP,对AspectJ的编译器或者织入无依赖性

@AspectJ切面使用@Aspect注解配置,拥有@Aspect的任何bean将被Spring自动识别注册并应用

用@Aspect注解的类可以有方法和字段,它们也可能包括切入点(pointcut),通知(advice),和引入(Introduction)声明

Aspect注解是不能通过类路径自动检测发现的,所以需要配合使用@Component注释或者在xml配置bean

一个类中的@Aspect注解标识它为一个切面,并且将自己从自动代理中排除

2.切入点的定义

一个切入点可以通过一个普通的方法定义来提供,并且切入点表达式使用@Pointcut注解,方法返回类型必须为void

环绕通知使用@Around注解来声明,通知方法的第一个参数必须是ProceedingJoinPoint类型

在通知内部调用ProceedingJoinPoint的proceed()方法会导致执行真正的方法,传入一个Object[]对象,数组中的值将被做为参数传递给方法

@Aspect
public class AspectClass {
// 配置前置通知
@Before("execution(* com.lovo.inter..*.t*(..))")
public void beforeMethod() {
System.out.println("执行beforeMethod方法");
}
// 配置后置通知
@After("execution(* com.lovo.inter..*.t*(..))")
public void afterMethod() {
System.out.println("执行after方法");
}
// 配置环绕通知
@Around("execution(* com.lovo.inter..*.g*(..))")
public Object press(ProceedingJoinPoint point) {
System.out.println("环绕执行前");
Object returnObj = null;
try {
returnObj = point.proceed();
} catch (Throwable e) {
e.printStackTrace();
}
System.out.println("环绕执行后");
return returnObj;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring AspectJ