Spring Boot 의 우아 함 사용 AOP
21415 단어 SpringAll
원본 링크:http://www.shuibo.cn/143.html
허가 협의: 서명 - 비상 업적 사용 - 연역 금지 4.0 국제 전재 원문 링크 및 작성 자 를 보류 하 십시오.
AOP 가 무엇 인지 약술 하 다.
AOP 는 Aspect Oriented Programming 의 줄 임 말로 절단면 프로 그래 밍 을 위 한 사전 컴 파일 방식 과 실행 시 동적 프 록 시 를 통 해 프로그램 기능 을 통합 적 으로 유지 하 는 기술 을 의미한다.AOP 를 이용 하면 업무 논 리 를 분리 하고 결합 도 를 낮 추 며 중용 성 을 높이 고 개발 효율 을 높 일 수 있다.
주요 용도
1. 의존 도 추가
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2. 절단면 클래스 작성
@Aspect // @Aspect
@Component // @Component IOC
public class ShuiBoAspect {
private static final Logger logger = LoggerFactory.getLogger(ShuiBoAspect.class);
public static long startTime;
public static long endTime;
/**
* execution(public * cn.shuibo.controller.*.*(..))
* cn.shuibo.controller , "..."
*/
@Pointcut("execution(public * cn.shuibo.controller.*.*(..))")
public void shuiboPointcutLog(){
}
@Before("shuiboPointcutLog()")
public void before(JoinPoint joinPoint) {
startTime = System.currentTimeMillis();
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
HttpServletRequest request = requestAttributes.getRequest();
Method method = signature.getMethod();
String requestURI = request.getRequestURI();
logger.info(" URL:" + requestURI);
String requestMethod = request.getMethod();
logger.info(" :" + requestMethod);
Object[] args = joinPoint.getArgs();
LocalVariableTableParameterNameDiscoverer u = new LocalVariableTableParameterNameDiscoverer();
String[] paramNames = u.getParameterNames(method);
if (args != null && paramNames != null) {
String params = "";
for (int i = 0; i < args.length; i++) {
params += " " + paramNames[i] + "=" + args[i];
}
logger.info(" :" + params);
}
String remoteAddr = request.getRemoteAddr();
logger.info("IP:" + remoteAddr);
String declaringTypeName = joinPoint.getSignature().getDeclaringTypeName();
logger.info(" :" + declaringTypeName);
String methodName = joinPoint.getSignature().getName();
logger.info(" :" + methodName);
}
@After("shuiboPointcutLog()")
public void after() {
endTime = System.currentTimeMillis() - startTime;
}
@AfterReturning(pointcut = "shuiboPointcutLog()", returning = "object")
public void getAfterReturn(Object object) {
logger.info(" :{}ms", endTime);
}
}
3. 테스트 클래스 작성
@RestController
public class TestController {
@GetMapping(value = "/index")
public String index(String text){
String shuibo = "shuibo.cn";
if(shuibo.equals(text)){
shuibo = "https://shuibo.cn";
}else{
shuibo = "http://shuibo.cn";
}
return shuibo;
}
}
4. 실행 결과 (콘 솔)
INFO 10216 --- [nio-8080-exec-1] cn.shuibo.aspect.ShuiBoAspect: URL:http://localhost:8080/index
INFO 10216 --- [nio-8080-exec-1] cn.shuibo.aspect.ShuiBoAspect: :GET
INFO 10216 --- [nio-8080-exec-1] cn.shuibo.aspect.ShuiBoAspect: : text=1
INFO 10216 --- [nio-8080-exec-1] cn.shuibo.aspect.ShuiBoAspect: IP:0:0:0:0:0:0:0:1
INFO 10216 --- [nio-8080-exec-1] cn.shuibo.aspect.ShuiBoAspect: :cn.shuibo.controller.TestController
INFO 10216 --- [nio-8080-exec-1] cn.shuibo.aspect.ShuiBoAspect: :index
INFO 10216 --- [nio-8080-exec-1] cn.shuibo.aspect.ShuiBoAspect: :4ms
총결산
이상 의 실천 을 통 해 우 리 는 Spring Aop 절단면 프로 그래 밍 기록 방문 기록 을 어떻게 사용 하 는 지 알 고 배 웠 다.본문 GitHub 주소:https://github.com/ishuibo/SpringAll