Heim >Java >javaLernprogramm >So implementieren Sie die automatische Springboot-Assembly durch Injektion von DispatcherServlet

So implementieren Sie die automatische Springboot-Assembly durch Injektion von DispatcherServlet

WBOY
WBOYnach vorne
2023-06-01 10:22:06852Durchsuche

Prinzipübersicht

Springboot stellt Webdienste für die Außenwelt bereit (einschließlich, aber nicht beschränkt auf die Spring-MVC-Kernklasse DispatcherServlet), um #🎜🎜 zu implementieren #

So implementieren Sie die automatische Springboot-Assembly durch Injektion von DispatcherServlet

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

Es gibt eine org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration-Konfiguration in der spring.factories-Datei im JAR-Paket

#🎜🎜 ##🎜 🎜#
@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, DispatcherServletRegistrationConditionSo implementieren Sie die automatische Springboot-Assembly durch Injektion von DispatcherServlet

DispatcherServletConfiguration# 🎜🎜#

DispatcherServletConfiguration Es handelt sich um eine interne Klasse von DispatcherServletAutoConfiguration, die durch @Configuration gekennzeichnet ist und vom Container automatisch gescannt wird. # 🎜🎜#

@Configuration(proxyBeanMethods = false): Die Konfigurationsklasse übernimmt den Lite-Modus

@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

  • #🎜🎜 #@ConditionalOnClass(ServletRegistration.class): Im Container muss eine ServletRegistration-Klasse vorhanden sein

  • @EnableConfigurationProperties({ HttpProperties.class, WebMvcProperties.class }): HttpProperties laden und WebMvcProperties#🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜#@B: Multipartresolver -Parsing -Klasse#🎜🎜 ## 🎜🎜###DispatcherServletregistrationConfiguration#🎜🎜 ## 🎜🎜#Die injizierte Logik dieser Klasse ist die Dasselbe wie DispatcherServletConfiguration, außer dass die Klasse mit @Import( DispatcherServletConfiguration.class) annotiert ist. Dann sind die beiden Klassendefinitionen in der richtigen Reihenfolge

    	@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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen