웹플럭스에서 AOP를 적용하는 방법은 역시나 스프링부트답게 엄청나게 간단하다.
정말 전자정부나 일반 Spring에서의 세팅은참..
아무튼, 라이브러리를 추가한다.
* maven 기준
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
AOP가 동작할 클래스를 만들어준다.
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.context.annotation.Configuration;
import org.aspectj.lang.JoinPoint;
@Configuration
@Aspect
public class AopWorker {
@Before("execution(public * 패키지명.*.*(..))")
public void before(JoinPoint point) {
System.out.println("before start : " + point.getSignature().getName());
}
@After("execution(public * 패키지명.*.*(..))")
public void after(JoinPoint point) {
System.out.println("after start : " + point.getSignature().getName());
}
//이런식으로 쭉쭉 나가면 된다..
}
위 세팅이 끝이다.
내부의 표현식은 기존 스프링에서 쓴 방식과 동일하게 사용하면 된다.
주의해야될 점은, AOP가 바라보는 클래스를 라우팅 역할을 하는 클래스에 걸어주면 안된다는 것 이다.
간단하게 이해를 돕기 위해 만들어본 클래스의 모습이다.
사용자의 요청에 대해서 index.html을 보여주는 라우터 클래스의 모습이다.
//라우터 클래스의 모습 예제 입니다.
package com.spring.boot.router;
@Configuration
public class DashBoardRouter {
private static final RequestPredicate TEXT_PLAIN = ;
//인덱스
@Bean
public RouterFunction<ServerResponse> index(DashBoardHandler handler) {
RequestPredicate pd1 = RequestPredicates.GET("/").and(RequestPredicates.accept(MediaType.TEXT_PLAIN));
RequestPredicate pd2 = RequestPredicates.POST("/").and(RequestPredicates.accept(MediaType.TEXT_PLAIN));
return RouterFunctions.route(pd1, handler::index).andRoute(pd2, handler::index);
}
}
다음은 해당 라우터 클래스가 사용하는 함수를 가지고있는 핸들러 클래스 모습이다.
//라우터 클래스가 사용하는 핸들러용 클래스 모습의 예제 입니다.
package com.spring.boot.handler;
@Component
public class DashBoardHandler {
private DatabaseConfig db;
public Mono<ServerResponse> index(ServerRequest result){
return ServerResponse.ok().render("index.html");
}
}
요런식의 라우팅 역할을 하는 클래스가 있다고하면, 해당 클래스에 aop를 걸게 되면 딱 1번만 동작하는 것을 보게 된다.
인플럭스에서 Bean 객체로 생성한 함수를 최초 생성시에 가져가서 리턴되는 함수만 계속해서 사용하기 때문이다.
그래서 위 내용 같은경우에는 DashBoardHandler라고 만들어준 클래스에 aop를 걸어주어야 한다.
위 내용을 토대로 AOP 설정을 해 준다면,
com.spring.boot.handler 패키지에 AOP를 걸어주어야 한다.
com.spring.boot.router 패키지에 걸면 AOP가 한번만 동작하는 모습을 보게 된다.
이상으로 웹플럭스에서 AOP설정에 대해 살펴 보았다.
spring webflux!
반응형
'Spring framework > Spring Webflux' 카테고리의 다른 글
[webflux websocket broad cast all] 웹플럭스 웹소켓 에코 말고 전체에게 보내기 (0) | 2023.05.22 |
---|---|
spring webflux 10 (웹플럭스 적용기, Multipart param, 웹플럭스 멀티파트 파라미터) (0) | 2020.07.27 |
spring webflux 8 (웹플럭스 적용기, 웹 필터, 인터셉터) (2) | 2020.04.06 |
spring webflux 7 (웹플럭스 적용기, MongoDb) (0) | 2020.04.01 |
spring webflux 6 (웹플럭스 적용기, Mysql) (0) | 2020.03.30 |
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)
댓글