对于Spring Boot 应用,使用AOP 只需要在pom 文件中引入好下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
然后编写一个AOP切面类:
package com.hlm.aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.context.annotation.Configuration;
//用于声明这是一个spring 管理配置的bean
@Configuration
//声明这是一个切面类
@Aspect
public class AopConfig {
//声明了一个表达式,描述要织入的目标的特性,如下样子就是想说com.hlm.controller.包下的类都会被织入该切面
@Around("@within(org.springframework.stereotype.Controller)")
public Object simpleAop(final ProceedingJoinPoint pjp) throws Throwable{
try {
System.out.println("我是方法调用前执行的!");
//调用原来方法
Object obj = pjp.proceed();
System.out.println("我是方法调用后执行的!");
return obj ;
} catch (Throwable e) {
//不处理异常,将其抛给调用者
throw e ;
}
}
}
运行结果为:
我是方法调用前执行的!
123456
我是方法调用后执行的!
Spring AOP 支持的表达还可以是其他的:如excution(public * *(..)) 或 @targer(com.hlm.service.Commonservice) ,excution 中的是方法,target 中的是接口。