Heim >Java >javaLernprogramm >So implementieren Sie die automatische Springboot-Assembly durch Injektion von DispatcherServlet
Springboot stellt Webdienste für die Außenwelt bereit (einschließlich, aber nicht beschränkt auf die Spring-MVC-Kernklasse DispatcherServlet), um #🎜🎜 zu implementieren #
Wann injiziert Springboot also die Kernklasse DispatcherServlet in den Container?Der Injektionsprozess folgt weiterhin dem automatischen Montageprozess, der standardmäßig in bereitgestellt wird Unterstützung für das Springboot-Framework
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE) @Configuration(proxyBeanMethods = false) @ConditionalOnWebApplication(type = Type.SERVLET) @ConditionalOnClass(DispatcherServlet.class) @AutoConfigureAfter(ServletWebServerFactoryAutoConfiguration.class) public class DispatcherServletAutoConfiguration { /* * The bean name for a DispatcherServlet that will be mapped to the root URL "/" */ public static final String DEFAULT_DISPATCHER_SERVLET_BEAN_NAME = "dispatcherServlet"; /* * The bean name for a ServletRegistrationBean for the DispatcherServlet "/" * public static final String DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME = "dispatcherServletRegistration"; // ... 省略代码 }
Es gibt zwei interne Klassen (Konfigurationsklassen) in DispatcherServletAutoConfiguration, DispatcherServletConfiguration, DispatcherServletRegistrationConfiguration und zwei entsprechende Bedingungsklassen DefaultDispatcherServletCondition, DispatcherServletRegistrationCondition
DispatcherServletConfiguration# 🎜🎜#DispatcherServletConfiguration Es handelt sich um eine interne Klasse von DispatcherServletAutoConfiguration, die durch @Configuration gekennzeichnet ist und vom Container automatisch gescannt wird. # 🎜🎜#
@Conditional(DefaultDispatcherServletCondition.class): Gemäß DefaultDispatcherServletCondition dition Die Hauptlogik zur Berechnung, ob der Klassenrückgabewert injiziert werden muss, besteht darin, zu prüfen, ob im Spring-Container bereits ein DispatcherServlet mit dem Namen „dispatcherServlet“ vorhanden ist
@Configuration(proxyBeanMethods = false) @Conditional(DefaultDispatcherServletCondition.class) @ConditionalOnClass(ServletRegistration.class) @EnableConfigurationProperties({ HttpProperties.class, WebMvcProperties.class }) protected static class DispatcherServletConfiguration { // @A @Bean(name = DEFAULT_DISPATCHER_SERVLET_BEAN_NAME) public DispatcherServlet dispatcherServlet(HttpProperties httpProperties, WebMvcProperties webMvcProperties) { DispatcherServlet dispatcherServlet = new DispatcherServlet(); dispatcherServlet.setDispatchOptionsRequest(webMvcProperties.isDispatchOptionsRequest()); dispatcherServlet.setDispatchTraceRequest(webMvcProperties.isDispatchTraceRequest()); dispatcherServlet.setThrowExceptionIfNoHandlerFound(webMvcProperties.isThrowExceptionIfNoHandlerFound()); dispatcherServlet.setPublishEvents(webMvcProperties.isPublishRequestHandledEvents()); dispatcherServlet.setEnableLoggingRequestDetails(httpProperties.isLogRequestDetails()); return dispatcherServlet; } // @B @Bean @ConditionalOnBean(MultipartResolver.class) @ConditionalOnMissingBean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME) public MultipartResolver multipartResolver(MultipartResolver resolver) { // Detect if the user has created a MultipartResolver but named it incorrectly return resolver; } }Unter diesen erbt DispatcherServletRegistrationBean von ServletRegistrationBean und stellt hauptsächlich Dienste für DispatcherServlet bereit . Sowohl DispatcherServletRegistrationBean als auch DispatcherServlet bieten die Funktion, Servlet zu registrieren und DispatcherServletPath-Informationen verfügbar zu machen
Das obige ist der detaillierte Inhalt vonSo implementieren Sie die automatische Springboot-Assembly durch Injektion von DispatcherServlet. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!