Spring과 함께 반응 형 프로그래밍 세계에 참여하고 싶습니다. 내가 알기로, it gives me a choice between two different paradigms : 주석 기반 (우리에게 잘 알려진 @Controller
, @RequestMapping
) 및 반응식 (which is intended to resolve an "Annotation Hell")입니다.Spring 5를 사용한 실제 컨트롤러 예제 : Web Reactive
내 문제는 일반적인 반응 형 컨트롤러가 어떻게 보일지 이해가 부족하다는 것입니다. 내 컨트롤러 클래스에서 사용할 수있는 세 가지 개념 인터페이스가있다 :
HandlerFunction<T>
(1) - 그때 라우터에이 방법을 등록, 구체적인 HandlerFunction<T>
인스턴스를 반환 각각의 특정 ServerRequest
하는 방법을 정의합니다. 권리?
RouterFunction
(2) FilterFunction
(3) - HandlerFunction
의 상응하는 모든 RequestPredicate
의 배치해야 특정 장소가 있습니까? 또는 주석 방법과 관련하여 각 컨트롤러에서 개별적으로 수행 할 수 있습니까? 그렇다면 글로벌 컨트롤러 (라우터가있는 경우)에이 컨트롤러에서이 라우터 부분을 적용하는 방법은 무엇입니까?
지금에 의해 반응성 컨트롤러 "템플릿"을 참조하는 방법 그건 :
public class Controller {
// handlers
private HandlerFunction<ServerResponse> handleA() {
return request -> ok().body(fromObject("a"));
}
// router
public RouterFunction<?> getRouter() {
return route(GET("/a"), handleA()).and(
route(GET("/b"), handleB()));
}
// filter
public RouterFunction<?> getFilter() {
return route(GET("/c"), handleC()).filter((request, next) -> next.handle(request));
}
}
그리고를, 마지막으로, 어떻게 주석으로 표시하지 않고는, 컨트롤러라고 말을?
저는 스프링 관련 참고 자료 및이 블로그와 관련된 모든 게시물을 공식 블로그에서 읽었습니다. 많은 샘플이 있지만, 모두 컨텍스트 (IMHO)에서 빠져 나와 전체 그림으로 어셈블 할 수는 없습니다.
실제 사례를 제공하고 이러한 기능 간의 상호 작용을 체계화하는 방법에 대해 잘 알고 있다면 감사하게 생각합니다.
이 특히 동안 때문에, 아마 제기로 너무 광범위 API는 아마도 대부분 안정적 일 것입니다. 스프링 5는 아직 기술적으로 RC가 아닙니다 (그리고 Spring Security Reactive는 여전히 주요 개발 단계에 있습니다). – chrylis
_ "스프링을 사용한 반응 형 프로그래밍 세계 ... 두 가지 패러다임 중에서 하나를 선택할 수 있습니다. 주석 기반과 반응 형 중 하나"_ 주석 기반 및 기능적 "과 같은 것이어야합니다. 둘 다 반응 적이며 주석 기반 스타일에만 고전적인 컨트롤러가 있습니다. – zeroflagL
여기에 묻는 것은 기능 모델의 경우 특히 "코드 구성 방법"입니다. 나는 이것으로 또한 고투했다. 샘플 코드는 하나의 긴 NLP 스타일 체인에서 모든 요청 매핑 (경로)을 선언해야합니다. 이것은 동일한 클래스 파일에 언급 될 필요가없는 라우트 사이의 결합을 도입하고, 핸들러 특정 클래스를 작성하려고하면 해당 라우트가 별도로 저장됩니다. 주석 기반 접근 방식은 이러한 문제를 해결할 수있는 것처럼 보입니다. 그러나 아직 그 방법을 작동시키지 못했습니다. 그것이 효과가 있었다고하더라도, 왜 기능적 접근 방식을 가지고 있습니까? – allenru