快速寫一個 Spring AOP 實現類 1. 定義業務類,使用 @Service 註解加入 Spring 容器。 2. 定義切麵類,使用 @Component 註解加入 Spring 容器,標註 @Aspect 表示此類為切麵類,並給方法標註通知類型。 通知類型 前置通知 後置通知 返回通知 異常 ...
快速寫一個 Spring AOP 實現類
- 定義業務類,使用 @Service 註解加入 Spring 容器。
@Service
public class MyService {
public String print() {
System.out.println("print...");
return "End";
}
}
定義切麵類,使用 @Component 註解加入 Spring 容器,標註 @Aspect 表示此類為切麵類,並給方法標註通知類型。
通知類型
- 前置通知
- 後置通知
- 返回通知
- 異常通知
- 環繞通知
@Aspect
@Component
public class MyAspect {
@Pointcut("execution(* com.xxx.MyService.*(..))")
public void pointCut() {
}
@Before("pointCut()")
public void start() {
System.out.println("前置通知");
}
@After("pointCut()")
public void end() {
System.out.println("後置通知");
}
@AfterReturning("pointCut()")
public void returnStart() {
System.out.println("返回通知");
}
@AfterThrowing("pointCut()")
public void exceptionStart() {
System.out.println("異常通知");
}
@Around("pointCut()")
public Object startAround(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("環繞通知開始");
Object proceed = joinPoint.proceed(joinPoint.getArgs());
System.out.println("環繞通知結束" + proceed);
return proceed;
}
}
- 定義啟動類
@EnableAspectJAutoProxy
@ComponentScan
public class App {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(App.class);
MyService service = context.getBean(MyService.class);
System.out.println("啟動");
String print = service.print();
System.out.println(print);
}
}
輸出
啟動
環繞通知開始
前置通知
print...
環繞通知結束End
後置通知
返回通知
End