Rumah > Java > javaTutorial > Bagaimana untuk melaksanakan pemasangan automatik Springboot dengan menyuntik DispatcherServlet

Bagaimana untuk melaksanakan pemasangan automatik Springboot dengan menyuntik DispatcherServlet

WBOY
Lepaskan: 2023-06-01 10:22:06
ke hadapan
839 orang telah melayarinya

Gambaran Keseluruhan Prinsip

Springboot menyediakan perkhidmatan web kepada dunia luar Lapisan bawah bergantung pada modul web dalam springframework (termasuk tetapi tidak terhad kepada kelas teras mvc spring DispatcherServlet) untuk melaksanakan

. Bagaimana untuk melaksanakan pemasangan automatik Springboot dengan menyuntik DispatcherServlet

Jadi bila springboot menyuntik kelas teras DispatcherServlet ke dalam bekas?
Proses suntikan masih mengikuti proses pemasangan automatik dan rangka kerja springboot menyediakan sokongan untuk pemasangan automatik secara lalai

Dalam Terdapat konfigurasi org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration dalam fail spring.factories dalam pakej jar

Bagaimana untuk melaksanakan pemasangan automatik Springboot dengan menyuntik DispatcherServlet

@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";
	// ... 省略代码
	}
Salin selepas log masuk

Terdapat dua dalaman kelas dalam DispatcherServletAutoConfiguration ( kelas Configuration) DispatcherServletConfiguration, DispatcherServletRegistrationConfiguration dan dua kelas Condition yang sepadan DefaultDispatcherServletCondition, DispatcherServletRegistrationCondition

DispatcherServletServletConfiguration>

DispatcherServletServlet kelas dalaman DispatcherServletAutoConfiguration dan ditandakan dengan @Configuration , akan diimbas secara automatik oleh bekas; Ia mempunyai dua kaedah: 1. dispatcherServlet; 2. multipartResolver

	@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;
		}
	}
Salin selepas log masuk

@A:

  • @Configuration(proxyBeanMethods = false): Kelas konfigurasi menggunakan Lite mod

  • @Conditional(DefaultDispatcherServletCondition.class): Kira sama ada untuk menyuntik berdasarkan nilai pulangan kelas DefaultDispatcherServletCondition Logik utama adalah untuk menyemak sama ada sudah ada DispatcherServlet bernama "dispatcher " dalam bekas Spring

  • @ConditionalOnClass(ServletRegistration.class): Mesti ada kelas ServletRegistration dalam bekas

  • @EnableConfigurationProperties({ HttpProperties.class, WebMvcProperties.class }): Memuatkan HttpProperties dan WebMvcProperties

@B: Inject MultipartResolver parsing class

DispatcherServlet<🎜RegistrationConfiguration🎜>Log Masuk🎜 kelas ini adalah sama seperti DispatcherServletConfiguration, tetapi ia diberi anotasi pada kelas @Import(DispatcherServletConfiguration.class), maka kedua-dua takrifan kelas adalah mengikut urutan

@Configuration(proxyBeanMethods = false)
	@Conditional(DispatcherServletRegistrationCondition.class)
	@ConditionalOnClass(ServletRegistration.class)
	@EnableConfigurationProperties(WebMvcProperties.class)
	@Import(DispatcherServletConfiguration.class) //@A
	protected static class DispatcherServletRegistrationConfiguration {

		@Bean(name = DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME)
		@ConditionalOnBean(value = DispatcherServlet.class, name = DEFAULT_DISPATCHER_SERVLET_BEAN_NAME)
		public DispatcherServletRegistrationBean dispatcherServletRegistration(DispatcherServlet dispatcherServlet,
				WebMvcProperties webMvcProperties, ObjectProvider<MultipartConfigElement> multipartConfig) {
			DispatcherServletRegistrationBean registration = new DispatcherServletRegistrationBean(dispatcherServlet,
					webMvcProperties.getServlet().getPath());
			// 设置名称		
			registration.setName(DEFAULT_DISPATCHER_SERVLET_BEAN_NAME);
			registration.setLoadOnStartup(webMvcProperties.getServlet().getLoadOnStartup());
			multipartConfig.ifAvailable(registration::setMultipartConfig);
			return registration;
		}
	}
Salin selepas log masuk
Antaranya, DispatcherServletRegistrationBean mewarisi perkhidmatan dari ServletRegistrationBean dan terutamanya menyediakan perkhidmatan for DispatcherServlet. Kedua-dua DispatcherServletRegistrationBean dan DispatcherServlet menyediakan fungsi mendaftarkan Servlet dan mendedahkan maklumat DispatcherServletPath

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pemasangan automatik Springboot dengan menyuntik DispatcherServlet. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan