AOPは、時には我々は、ログを印刷することで、トラブルシューティングに願っていたプロジェクトで、AOPは私たちが達成するのを助けることができ、アスペクト指向プログラミングです。
私たちは、創造springbootプロジェクトの後に、関連する依存AOPを追加する必要があります。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
1.準備クラスのサービス
package org.javaboy.aop.service;
import org.springframework.stereotype.Service;
@Service
public class UserService {
public String getUsernameById(Integer id) {
System.out.println("getUsernameById");
return "javaboy";
}
public void deleteUserById(Integer id) {
System.out.println("deleteUserById");
}
}
これは、クラスには2つのメソッドを提供し、サービスクラスです。
2.controllerクラス
package org.javaboy.aop;
import org.javaboy.aop.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/test1")
public String getUsernameById(Integer id) {
return userService.getUsernameById(id);
}
@GetMapping("/test2")
public void deleteUserById(Integer id) {
userService.deleteUserById(id);
}
}
インジェクションサービスコントロールクラスのクラスメソッドは、コントローラクラスのサービスクラスを呼び出します。
3.書き込みAOP
package org.javaboy.aop;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
//表示spring组件
@Component
//表示是切面
@Aspect
public class LogComponent {
//定义拦截规则
@Pointcut("execution(* org.javaboy.aop.service.*.*(..))")
public void pc1() {
}
//前置通知
@Before(value = "pc1()")
public void before(JoinPoint jp) {
//拿到执行方法名
String name = jp.getSignature().getName();
System.out.println("before--" + name);
}
//后置通知
@After(value = "pc1()")
public void after(JoinPoint jp) {
String name = jp.getSignature().getName();
System.out.println("after--" + name);
}
//返回通知
@AfterReturning(value = "pc1()",returning = "result")
public void afterReturning(JoinPoint jp,Object result) {
String name = jp.getSignature().getName();
System.out.println("afterReturning>>>>" + name + "------" + result);
}
//异常通知
@AfterThrowing(value = "pc1()",throwing = "e")
public void afterThrowing(JoinPoint jp,Exception e) {
String name = jp.getSignature().getName();
System.out.println("afterThrowing--" + name + "------" + e.getMessage());
}
//环绕通知(包含四个)
@Around(value = "pc1()")
public Object arround(ProceedingJoinPoint pjp) throws Throwable {
return pjp.proceed();
}
}
4.アクセスパスます。http:// localhost:8080 /
test1のコンソール印刷:
before--getUsernameById
getUsernameById
after--getUsernameById
afterReturning>>>>getUsernameById------javaboy