spring 디자인 예쁘다: WebMvcConfigurer
이 글 은 주로 WebMvcConfigure 디자인 의 교묘 한 점 을 다 루 고 있다.목적 중 하나: WebMvcConfigure 가 무엇 인지 알 아 보 세 요.목적 2: WebMvcConfigure 디자인 의 장점
WebMvcConfigure 가 뭐 예요?
WebMvcConfigure 를 어떻게 사용 합 니까?
@EnableWebMvc
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
@Override
public void extendMessageConverters(List> converters) {
}
}
이것 은 간단 한 실현 이다. spring 4.0 이전에 우 리 는 WebMvcConfigurerAdapter 를 원 했 지만 5.0 은 필요 없다.자바 8 인터페이스 새로운 기능: 1. default 기본 구현.2. static 기본 구현.즉, 우리 가 default 로 고 를 받 았 으 니 반드시 실현 할 필요 가 없다.WebMvcConfigurerAdapter 이것 은 바로 WebMvcConfigurer 인 터 페 이 스 를 보호 형식 으로 덮어 쓰 는 것 입 니 다. 우 리 는 WebMvcConfigurerAdapter 를 실현 하기 위해 모든 인터페이스 방법 을 실현 할 필요 가 없습니다.
WebMvcConfigure 가 뭐 예요?우리 가 간단하게 이해 하 는 것 은 예전 에 우리 가 xml 로 설 정 했 을 때의 'spring - web. xml' 이다.바로 우 리 는 많은 웹 구성 요 소 를 설정 할 수 있 습 니 다. 예 를 들 어 메시지 전환, 차단기, 보기 변환기, 크로스 도 메 인 설정, 자원 컨트롤 러 등 입 니 다.우 리 는 인터페이스의 주석 설명 만 볼 필요 가 있다.
우 리 는 spring 소스 코드 를 볼 때 주 해 를 보 았 습 니 다. 점 만 찍 으 면 해당 하 는 처리 방법 이 있 습 니 다. @EnableWebMvc 발견 Import (Delegating WebMvcConfiguration. class) 즉 Delegating WebMvcConfiguration 이 설정 가 져 오기
public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport
public class WebMvcConfigurationSupport implements ApplicationContextAware, ServletContextAware
Delegating WebMvcConfiguration: 주로 Spring 용기 에 몇 개의 WebMvcConfiguration 이 있 는 지 검사 한 다음 에 넣 습 니 다.그리고 여러 가지 방법 이 있 습 니 다.WebMvcConfigurationSupport 는 우리 웹 구성 요소 의 초기 화 를 위 한 것 입 니 다. 예 를 들 어 Handler Mapping, Request Mapping Handler Adapter, Request Mapping Handler Mapping 등 입 니 다.
여기 서 WebMvcConfigure 를 어떻게 사용 하 는 지 알 게 되 었 습 니 다.
WebMvcConfigure 디자인 의 장점
구상: 만약 당신 이 스스로 설계 하 라 고 한다 면, 예 를 들 어 내 가 메시지 변환 기 를 확장 하려 고 한다 면, 지금 우 리 는 Request Mapping Handler Adapter. getDefault Argument Resolvers 에서 알 게 되 었 습 니 다.
resolvers.add(new RequestResponseBodyMethodProcessor(getMessageConverters(), this.requestResponseBodyAdvice));
resolvers.add(new RequestPartMethodArgumentResolver(getMessageConverters(), this.requestResponseBodyAdvice));
public List> getMessageConverters() {
return this.messageConverters;
}
。Request Mapping Handler Adapter. getMessage Converters 가 메시지 컨버터 를 얻 었 다 는 것 을 알 게 되 었 습 니 다. 우 리 는 지금 방법 을 강구 하여 message Converters 로 확장 하면 됩 니 다.
디자인 사상: 1. 개방 폐쇄 원칙.2. 인터페이스 프로 그래 밍.
1. 인 터 페 이 스 를 써 야 합 니 다. 이 인 터 페 이 스 는 기본 적 인 방법 인 setMessage Converters 가 있 습 니 다. 2. 이 인 터 페 이 스 를 확장 하여 A 를 설정 합 니 다.3. Request Mapping HandlerAdapter 는 setMessage Converters 일 때 템 플 릿 방법 을 호출 하거나 모든 A 설정 을 수집 하여 message Converters 에 넣 으 면 됩 니 다.여기 서 우리 가 고려 해 야 할 몇 가지 문제: 1. 기본 메시지 컨버터 는 어떻게 합 니까?2. 이 설정 이 없 으 면 어떻게 처리 합 니까?
스프링 이 어떻게 하 는 지 봅 시다.
@Configuration
public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport {
private final WebMvcConfigurerComposite configurers = new WebMvcConfigurerComposite();
@Autowired(required = false)
public void setConfigurers(List configurers) {
if (!CollectionUtils.isEmpty(configurers)) {
this.configurers.addWebMvcConfigurers(configurers);
}
}
@Override
protected void configurePathMatch(PathMatchConfigurer configurer) {
this.configurers.configurePathMatch(configurer);
}
@Override
protected void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
this.configurers.configureContentNegotiation(configurer);
}
@Override
protected void configureAsyncSupport(AsyncSupportConfigurer configurer) {
this.configurers.configureAsyncSupport(configurer);
}
@Override
protected void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
this.configurers.configureDefaultServletHandling(configurer);
}
WebMvcConfigurer Composite 는 무엇 입 니까?
class WebMvcConfigurerComposite implements WebMvcConfigurer {
private final List delegates = new ArrayList<>();
public void addWebMvcConfigurers(List configurers) {
if (!CollectionUtils.isEmpty(configurers)) {
this.delegates.addAll(configurers);
}
}
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
for (WebMvcConfigurer delegate : this.delegates) {
delegate.configurePathMatch(configurer);
}
}
말 그대로 WebMvcConfigurer 에이전트 입 니 다. 저희 가 설정 한 WebMvcConfigurer 는 모두 WebMvcConfigurer Composite 에 추 가 됩 니 다.
Delegating WebMvcConfiguration 의 다른 설정 방법 은 모두 WebMvcConfiguration Support 의 템 플 릿 방법 입 니 다.
RequestMappingHandlerAdapter 가 메시지 변환 기 를 어떻게 불 러 오 는 지 보 려 면:
protected final List> getMessageConverters() {
if (this.messageConverters == null) {
this.messageConverters = new ArrayList<>();
configureMessageConverters(this.messageConverters);
if (this.messageConverters.isEmpty()) {
addDefaultHttpMessageConverters(this.messageConverters);
}
extendMessageConverters(this.messageConverters);
}
return this.messageConverters;
}
protected void extendMessageConverters(List> converters) {
}
먼저 메시지 변환기 가 설정 되 어 있 는 지 확인 하고 설정 되 어 있 지 않 으 면 기본 값 을 불 러 옵 니 다. 확장 되 어 있 는 메시지 변환기 가 있 는 지 확인 하 십시오. 여 기 는 모두 템 플 릿 방법 입 니 다. 모두 Delegating WebMvcConfiguration 에서 만 들 었 습 니 다.
저 는 그때 한 가지 문 제 를 생각 하고 있 었 습 니 다. Delegating WebMvcConfiguration 은 실현 할 수 있 지 않 습 니까? 왜 WebMvcConfigurer Composite 를 해 야 합 니까?Delegating WebMvcConfiguration 은 WebMvcConfigurerComposite 를 사용 하지 않 고 List 를 직접 사용 합 니 다. 왜 그 러 세 요?
이 가능 하 다, ~ 할 수 있다,...
물론 제 가 디자인 하면 WebMvcConfigurer Composite 를 사용 하지 않 아 도 될 것 같 습 니 다.
총결산
1. WebMvcConfigure 는 웹 요청 과정 에서 의 구성 을 설정 하 는 것 입 니 다.2. 자바 8 인 터 페 이 스 는 default 을 사용 할 수도 있 고 static 방법 을 사용 할 수도 있 습 니 다.3. 인터페이스 프로 그래 밍, 템 플 릿 방법.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 클래스 상용 방법 분석Class 클래스 는 자바 에서 클래스 정 보 를 저장 하 는 인 스 턴 스 입 니 다.그 안에 각종 반사 방법 이 있 는데 이미 가지 고 있 는 정 보 를 파악 하고 그것 을 익히 면 우리 의 일상적인 반사 프로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.