- 切面
@Aspect
@Component
public class HandlerAspect {
/**
* 切点表达式: 切点的集合
*/
@Pointcut("execution(* com.shi.service.LoginService.*(..))")
public void pointCut(){
}
@Before(value = "pointCut()")
public void beforeAdvice(){
System.out.println("前置通知");
}
@After(value = "pointCut()")
public void afterAdvice(){
System.out.println("后置通知");
}
@Around("pointCut()")
public Object RoundAdvice(ProceedingJoinPoint joinPoint){
System.out.println("前置环绕");
Object returnValue=null;
try {
returnValue = joinPoint.proceed();
} catch (Throwable e) {
throw new RuntimeException(e);
}
System.out.println("后置环绕");
return returnValue;
}
@AfterReturning(value = "pointCut()",returning = "res")
public void returnAdvice(String res){
System.out.println("返回通知");
}
@AfterThrowing(value = "pointCut()")
public void throwAdvice(){
System.out.println("异常通知");
}
}
- 正常切点
@Service
public class LoginService {
public String login(String args) {
System.out.println("登录成功");
return null;
}
}
- 测试类
@SpringBootTest
class ApplicationTests {
@Resource
private LoginService loginService;
@Test
void testAround() {
loginService.login("张三");
}
}
4. 异常切点
@Service
public class LoginService {
public String login(String args) {
System.out.println("登录成功");
int i = 1 / 0;
return null;
}
}
- 测试类
@SpringBootTest
class ApplicationTests {
@Resource
private LoginService loginService;
@Test
void testAround() {
loginService.login("张三");
}
}