pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

Springboot自動裝配之注入DispatcherServlet的實現方法

這篇文章主要介紹了Springboot自動裝配之注入DispatcherServlet,Springboot向外界提供web服務,底層依賴了springframework中的web模塊來實現,那么springboot在什么時機向容器注入DispatcherServlet這個核心

原理概述

Springboot向外界提供web服務,底層依賴了springframework中的web模塊(包含但不限于spring mvc核心類DispatcherServlet)來實現

那么springboot在什么時機向容器注入DispatcherServlet這個核心類的呢
注入的流程還是遵循了自動裝配流程,在springboot框架里默認提供了該自動裝配的支持

在jar包里的spring.factories文件里有個 org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration配置

@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";
	// ... 省略代碼
	}

在DispatcherServletAutoConfiguration中有兩個內部類(配置類) DispatcherServletConfiguration、DispatcherServletRegistrationConfiguration和兩個對應的Condition類DefaultDispatcherServletCondition、DispatcherServletRegistrationCondition

DispatcherServletConfiguration

DispatcherServletConfiguration是DispatcherServletAutoConfiguration 的一個內部類,并被 @Configuration標注,會被容器自動掃描到;其有兩個方法: 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;
		}
	}

@A:

  • @Configuration(proxyBeanMethods = false):配置類采用Lite模式
  • @Conditional(DefaultDispatcherServletCondition.class):根據DefaultDispatcherServletCondition類返回值計算是否要注入,主要邏輯是檢驗Spring容器中是否已經存在一個名字為"dispatcherServlet"的DispatcherServlet
  • @ConditionalOnClass(ServletRegistration.class):容器中必須要有ServletRegistration類
  • @EnableConfigurationProperties({ HttpProperties.class, WebMvcProperties.class }):加載HttpProperties和WebMvcProperties

@B:注入 MultipartResolver 解析類

DispatcherServletRegistrationConfiguration

該類注入的邏輯與DispatcherServletConfiguration 相同,只不過在類上注解了 @Import(DispatcherServletConfiguration.class)那么這兩個類定義就有了先后順序

@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;
		}
	}

其中,DispatcherServletRegistrationBean繼承自ServletRegistrationBean,主要為DispatcherServlet提供服務。DispatcherServletRegistrationBean和DispatcherServlet都提供了注冊Servlet并公開DispatcherServletPath信息的功能

面試點

spring mvc和spring boot的關系,相信讀了上面的文章會說出一兩點;

到此這篇關于Springboot自動裝配之注入DispatcherServlet的文章就介紹到這了,更多相關Springboot注入DispatcherServlet內容請搜索html5模板網以前的文章希望大家以后多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

主站蜘蛛池模板: 开锐教育-学历提升-职称评定-职业资格培训-积分入户 | 报警器_家用防盗报警器_烟雾报警器_燃气报警器_防盗报警系统厂家-深圳市刻锐智能科技有限公司 | 5L旋转蒸发器-20L-50L旋转蒸发器-上海越众仪器设备有限公司 | 合金耐磨锤头_破碎机锤头_郑州市德勤建材有限公司 | 仪器仪表网 - 永久免费的b2b电子商务平台 | 贵州科比特-防雷公司厂家提供贵州防雷工程,防雷检测,防雷接地,防雷设备价格,防雷产品报价服务-贵州防雷检测公司 | 医养体检包_公卫随访箱_慢病随访包_家签随访包_随访一体机-济南易享医疗科技有限公司 | 地脚螺栓_材质_标准-永年县德联地脚螺栓厂家 | 座椅式升降机_无障碍升降平台_残疾人升降平台-南京明顺机械设备有限公司 | 基业箱_环网柜_配电柜厂家_开关柜厂家_开关断路器-东莞基业电气设备有限公司 | 锯边机,自动锯边机,双面涂胶机-建业顺达机械有限公司 | 定硫仪,量热仪,工业分析仪,马弗炉,煤炭化验设备厂家,煤质化验仪器,焦炭化验设备鹤壁大德煤质工业分析仪,氟氯测定仪 | 至顶网| 馋嘴餐饮网_餐饮加盟店火爆好项目_餐饮连锁品牌加盟指南创业平台 | 婚博会2024时间表_婚博会门票领取_婚博会地址-婚博会官网 | 天津中都白癜风医院_天津白癜风医院_天津治疗白癜风 | 河南橡胶接头厂家,河南波纹补偿器厂家,河南可曲挠橡胶软连接,河南套筒补偿器厂家-河南正大阀门 | 广域铭岛Geega(际嘉)工业互联网平台-以数字科技引领行业跃迁 | 清洁设备_洗地机/扫地机厂家_全自动洗地机_橙犀清洁设备官网 | 南京兰江泵业有限公司-水解酸化池潜水搅拌机-絮凝反应池搅拌机-好氧区潜水推进器 | 无机纤维喷涂棉-喷涂棉施工工程-山东华泉建筑工程有限公司▲ | 通信天线厂家_室分八木天线_对数周期天线_天线加工厂_林创天线源头厂家 | 铝单板_铝窗花_铝单板厂家_氟碳包柱铝单板批发价格-佛山科阳金属 | 电缆接头_防水接头_电缆防水接头_防水电缆接头_上海闵彬 | 土壤墒情监测站_土壤墒情监测仪_土壤墒情监测系统_管式土壤墒情站-山东风途物联网 | 武汉森源蓝天环境科技工程有限公司-为环境污染治理提供协同解决方案 | 清水混凝土修复_混凝土色差修复剂_混凝土色差调整剂_清水混凝土色差修复_河南天工 | 颚式破碎机,圆锥破碎机,制砂机-新乡市德诚机电制造有限公司 | 东莞工厂厂房装修_无尘车间施工_钢结构工程安装-广东集景建筑装饰设计工程有限公司 | RO反渗透设备_厂家_价格_河南郑州江宇环保科技有限公司 | 胶辊硫化罐_胶鞋硫化罐_硫化罐厂家-山东鑫泰鑫智能装备有限公司 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 三价铬_环保铬_环保电镀_东莞共盈新材料贸易有限公司 | 温州富欧金属封头-不锈钢封头厂家 | 网站优化公司_北京网站优化_抖音短视频代运营_抖音关键词seo优化排名-通则达网络 | arch电源_SINPRO_开关电源_模块电源_医疗电源-东佑源 | 不锈钢散热器,冷却翅片管散热器厂家-无锡市烨晟化工装备科技有限公司 | 东风体检车厂家_公共卫生体检车_医院体检车_移动体检车-锦沅科贸 | 膜结构车棚|上海膜结构车棚|上海车棚厂家|上海膜结构公司 | 北京网站建设首页,做网站选【优站网】,专注北京网站建设,北京网站推广,天津网站建设,天津网站推广,小程序,手机APP的开发。 | 烽火安全网_加密软件、神盾软件官网| 多功能三相相位伏安表-变压器短路阻抗测试仪-上海妙定电气 |