介绍:
基于XML配置文件的AOP实现,需要在Spring配置文件中配置大量信息
如实现前置通知时需在xml中配置正则表达式拦截器,配置aop:aspect等
使用@AspectJ注解来简化AOP实现
这里简单说明关于AspectJ注解功能
@Aspect:用于定义一个切面;
@Pointcut:定义一个切入点,一个返回值为viod且方法体为普通方法;
@Before:用于定义一个前置通知,相当于BeforeAdvice;
@AfterReturning用于定义一个后置通知;
@AfterThrowing:用于定义一个异常通知;
@Around:用于定义一个环绕通知;
@After:用于定义final通知,不管是否异常都会执行;
下面演示将基于XML配置的方法改为基于@AspectJ注解配置
1.为接口的实现类添加@Component注解,则会在Spring容器中自动创建ProductService的Bean实例
@Component("productService")
2.修改通知类,使用注解定义Bean、切面、切点和通知
package com.ssm.aop;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
//定义切面类,在此类中编写通知
@Aspect
@Component
这里使用切入点的正则表达式execution,含义是对包路径下所有方法进行拦截,相当于拦截器;
public class AllLogAdvice {
//定义切入点表达式
@Pointcut("execution(* com.ssm.service.ProductService.*(..))")
//使用一个返回值为void、方法体为空的方法来命名切入点
private void allMethod(){
}
3.使用前置通知注解,这里切入点的名字为allMethod()
配置xml配置文件,配置自动扫描的包,开启基于@AspectJ切面的注解处理器
运行结果
使用@AspectJ注解代替了繁琐的xml配置方式
总结:
基于@AspectJ注解的AOP实现效果与基于XML配置文件的AOP实现效果相同,且可使Spring开发更为简洁,极大简化了Spring的配置。