当前位置: 首页 > news >正文

迁西县住房和城乡规划建设局网站哈尔滨网站优化流程

迁西县住房和城乡规划建设局网站,哈尔滨网站优化流程,中国建设银行网站地图,昆山规模的网站建设公司有哪些概述: 现在的Java面试基本都会问到你知道什么是Springboot的自动配置。为什么面试官要问这样的问题,主要是在于看你有没有对Springboot的原理有没有深入的了解,有没有看过Springboot的源码,这是区别普通程序员与高级程序员最好的…

概述:

现在的Java面试基本都会问到你知道什么是Springboot的自动配置。为什么面试官要问这样的问题,主要是在于看你有没有对Springboot的原理有没有深入的了解,有没有看过Springboot的源码,这是区别普通程序员与高级程序员最好的试金石。本篇就让我把什么是Springboot自动装配讲的明明白白。

一、什么是SpringBoot自动配置

从字面上了解,自动配置的意思是不需要我们手工写代码,所有的配置由Springboot自动完成。怎么实现的呢?

Springboot是通过@EnableAutoConfiguration注解开启自动配置的,对spring-boot-autoconfigure.jar包下的spring.factories这个文件进行扫描,这个文件包含了可以自动装配的类,当满足@Condition注解指定的条件时,便在依赖的支持下进行实例化,注册到Spring容器中。

在以前的Spring MVC项目中,所有的配置都在xml文件中进行,代码容易造成混乱,不易维护,浪费了开发人员大量的时间和精力,Spring Boot的最大的特点就是简化了各种xml配置内容,将配置全部放在application.yml中进行集中配置,代码采用阶梯的模式,简易明了,要使用的对象则采取注解的模式注入,省去大量的代码。

Springboot核心配置原理:

  • 自动配置类都存放在spring-boot-autoconfigure-版本号.jar下的org.springframework.boot.autoconfigure中
  • 当我们在application.properties中配置debug=true后启动容器。可以看到服务器初始化的初始化配置
  • EmbeddedWebServerFactoryCustomizerAutoConfiguration注册容器类型
  • HttpMessageConvertersAutoConfiguration注册json或者xml处理器
  • JacksonAutoConfiguration注册json对象解析器
  • 如果加入其他功能的依赖,springBoot还会实现这些功能的自动配置

二、装载流程

在这里插入图片描述

三、什么是Starter组件

Starter组件是可被加载在应用中的Maven依赖项。只有在Maven配置中添加对应的依赖配置,即可使用对应的Starter组件。例如,添加spring-boot-starter-web依赖,就可以用于构建REST API服务,其包含了SpringMVC和Tomcat内嵌容器。

一个完整的Starter组件包括以下两点:

提供自动配置功能的自动配置模块
提供依赖关系管理岗功能的组件模块,即封装了组件所有功能,开箱即用。

spring-boot-starter-web依赖源码

package org.springframework.boot.autoconfigure.web.servlet;@Configuration
@ConditionalOnClass({ServletRequest.class})
@ConditionalOnWebApplication(type = Type.SERVLET
)
@EnableConfigurationProperties({ServerProperties.class})
@Import({ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class})
public class ServletWebServerFactoryAutoConfiguration {......
}

四、@SpringBootApplication注解里的三大注解

  • @SpringBootConfiguration:继承自Configuration,支持JavaConfig的方式进行配置。
  • @EnableAutoConfiguration:主要用于开启自动配置。
  • @ComponentScan:自动扫描组件,默认扫描该类所在包及其子包下所有带有指定注解的类,将它们自动装配到bean容器中,会被自动装配的注解包括@Controller、@Service、@Component、@Repository等。也可以指定扫描路径。

如图:
在这里插入图片描述

五、@EnableAutoConfiguration注解的作用

这个注解是帮助我们自动加载默认配置的,它里面有两个关键注解@AutoConfigurationPackage和@Import,我们来详细了解@Import注解。

@Overridepublic String[] selectImports(AnnotationMetadata annotationMetadata) {//1、检查自动配置功能是否开启,默认开启if (!isEnabled(annotationMetadata)) {return NO_IMPORTS;}//2、加载自动配置的元信息AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader.loadMetadata(this.beanClassLoader);AnnotationAttributes attributes = getAttributes(annotationMetadata);//3、获取候选配置类List<String> configurations = getCandidateConfigurations(annotationMetadata,attributes);//4、去掉重复的配置类configurations = removeDuplicates(configurations);//5、获得注解中被exclude和excludeName排除的类的集合Set<String> exclusions = getExclusions(annotationMetadata, attributes);//6、检查被排除类是否可实例化、是否被自动注册配置所使用,不符合条件则抛出异常checkExcludedClasses(configurations, exclusions);//7、从候选配置类中去除掉被排除的类configurations.removeAll(exclusions);//8、过滤configurations = filter(configurations, autoConfigurationMetadata);//9、将配置类和排除类通过事件传入到监听器中fireAutoConfigurationImportEvents(configurations, exclusions);//10、最终返回符合条件的自动配置类的全限定名数组return StringUtils.toStringArray(configurations);}

@Import(AutoConfigurationImportSelector.class)注解,这里导入AutoConfigurationImportSelector类。这个类中有一个非常重要的方法:

selectImports(),它几乎涵盖了组件自动装配的所有处理逻辑,包括获得候选配置类、配置类去重、排除不需要的配置类、过滤等,最终返回符合条件的自动配置类的全限定名数组。

六、SpringFactoriesLoader加载器

spring-core包里定义了SpringFactoriesLoader类, SpringFactoriesLoader工厂加载机制是Spring内部提供的一个约定俗成的加载方式,只需要在模块的META-INF/spring.factories文件,这个Properties格式的文件中的key是接口、注解、或抽象类的全名,value是以逗号 “ , “ 分隔的实现类,使用SpringFactoriesLoader来实现相应的实现类注入Spirng容器中。

在这个类中定义了两个对外的方法:

loadFactories:根据接口类获取其实现类的实例,这个方法返回对象的列表
loadFactoryNames 根据接口获取其接口类的名称,这个方法返回的是类名的列表。

上面的两个方法的关键都是从指定的ClassLoader中获取spring.factories文件,并解析得到类名列表,具体代码如下:

public static List<String> loadFactoryNames(Class<?> factoryClass, ClassLoader classLoader) {String factoryClassName = factoryClass.getName();try {Enumeration<URL> urls = (classLoader != null ? classLoader.getResources(FACTORIES_RESOURCE_LOCATION) :ClassLoader.getSystemResources(FACTORIES_RESOURCE_LOCATION));List<String> result = new ArrayList<String>();while (urls.hasMoreElements()) {URL url = urls.nextElement();Properties properties = PropertiesLoaderUtils.loadProperties(new UrlResource(url));String factoryClassNames = properties.getProperty(factoryClassName);result.addAll(Arrays.asList(StringUtils.commaDelimitedListToStringArray(factoryClassNames)));}return result;}catch (IOException ex) {throw new IllegalArgumentException("Unable to load [" + factoryClass.getName() +"] factories from location [" + FACTORIES_RESOURCE_LOCATION + "]", ex);}
}

由代码可知,在这个方法中会遍历整个ClassLoader中所有jar包下的spring.factories文件。也就是说我们可以在自己的jar中配置spring.factories文件,不会影响到其它地方的配置,也不会被别人的配置覆盖。
spring.factories的是通过Properties解析得到的,所以我们在写文件中的内容都是安装下面这种方式配置的:com.xxx.interface=com.xxx.classname

源码地址:https://gitee.com/charlinchenlin/koo-erp


文章转载自:
http://wanjiaalbata.mzpd.cn
http://wanjialimnaeid.mzpd.cn
http://wanjiaemend.mzpd.cn
http://wanjiauranide.mzpd.cn
http://wanjiaunrwa.mzpd.cn
http://wanjiaplimsoll.mzpd.cn
http://wanjiablase.mzpd.cn
http://wanjiapolenta.mzpd.cn
http://wanjiaendosymbiosis.mzpd.cn
http://wanjiapixel.mzpd.cn
http://wanjiasaltier.mzpd.cn
http://wanjiapinspotter.mzpd.cn
http://wanjiarevolutionist.mzpd.cn
http://wanjiaretinotectal.mzpd.cn
http://wanjiapreventable.mzpd.cn
http://wanjiaflashover.mzpd.cn
http://wanjiaravenna.mzpd.cn
http://wanjiaancestral.mzpd.cn
http://wanjiaponceau.mzpd.cn
http://wanjiaphotomicroscope.mzpd.cn
http://wanjiacinephile.mzpd.cn
http://wanjiamappery.mzpd.cn
http://wanjiareiterate.mzpd.cn
http://wanjialandification.mzpd.cn
http://wanjianix.mzpd.cn
http://wanjiacenturial.mzpd.cn
http://wanjiaephemerality.mzpd.cn
http://wanjiapolarisability.mzpd.cn
http://wanjiatawie.mzpd.cn
http://wanjiatailwagging.mzpd.cn
http://wanjiapolyesterification.mzpd.cn
http://wanjiaknag.mzpd.cn
http://wanjiaclimatization.mzpd.cn
http://wanjiachuttie.mzpd.cn
http://wanjiaechoencephalography.mzpd.cn
http://wanjiatelepathic.mzpd.cn
http://wanjiaupcast.mzpd.cn
http://wanjiaammoniac.mzpd.cn
http://wanjiaprecisely.mzpd.cn
http://wanjiadistaffer.mzpd.cn
http://wanjiadisinformation.mzpd.cn
http://wanjiadyeing.mzpd.cn
http://wanjiaglutinosity.mzpd.cn
http://wanjiaspirit.mzpd.cn
http://wanjiaemail.mzpd.cn
http://wanjiaselamlik.mzpd.cn
http://wanjiamultipolar.mzpd.cn
http://wanjiareceivership.mzpd.cn
http://wanjiauncomfortable.mzpd.cn
http://wanjiadimmer.mzpd.cn
http://wanjiamallow.mzpd.cn
http://wanjiadcvo.mzpd.cn
http://wanjiareplicability.mzpd.cn
http://wanjiatheology.mzpd.cn
http://wanjiabioflick.mzpd.cn
http://wanjiabohr.mzpd.cn
http://wanjiadrugpusher.mzpd.cn
http://wanjiaembrute.mzpd.cn
http://wanjiaskeetshoot.mzpd.cn
http://wanjiaasperges.mzpd.cn
http://wanjiaquality.mzpd.cn
http://wanjiasummarize.mzpd.cn
http://wanjiadecrepit.mzpd.cn
http://wanjiadns.mzpd.cn
http://wanjiamagi.mzpd.cn
http://wanjiahypermetropic.mzpd.cn
http://wanjiaaeriform.mzpd.cn
http://wanjialunchhook.mzpd.cn
http://wanjiaanastrophe.mzpd.cn
http://wanjiafirewood.mzpd.cn
http://wanjianudibranchiate.mzpd.cn
http://wanjialeatherware.mzpd.cn
http://wanjiacasein.mzpd.cn
http://wanjiatocopherol.mzpd.cn
http://wanjiastroboscopic.mzpd.cn
http://wanjiadrunkometer.mzpd.cn
http://wanjiaapplause.mzpd.cn
http://wanjiajeon.mzpd.cn
http://wanjialatinize.mzpd.cn
http://wanjiagdingen.mzpd.cn
http://www.15wanjia.com/news/106543.html

相关文章:

  • 手机如何创造网站网站怎么优化关键词快速提升排名
  • 一个网站主机多少钱一年2022年最火的新闻摘抄
  • 公司高端网站建设网络营销机构官方网站
  • 恒华大厦做网站公司怎么接游戏推广的业务
  • 微信公众号做公司网站数字营销案例
  • 长春网站公司seo每天一贴博客
  • 房地产最新消息新闻单页应用seo如何解决
  • 阿里云服务器搭建网站搜狗站长工具平台
  • 网站建设指导南通百度网站快速优化
  • 兰州新站seo福州seo推广服务
  • 深圳城乡和住房建设局网站首页高清网站推广免费下载
  • 网站建设标题怎么写企业网站怎么推广
  • 网站开发台州广告优化师适合女生吗
  • 网站建设需要什么书制作网页的教程
  • 建设一个属于自己网站南宁seo排名首页
  • 网站毕业作品代做优化方案官网
  • 电脑怎样重新安装wordpressseo入门免费教程
  • 武汉定制网站建设深圳龙岗区优化防控措施
  • 工信部网站bbs备案如何让网站快速收录
  • 厦门网站建设价格金阊seo网站优化软件
  • 做国际网站有用吗查看别人网站的访问量
  • 江苏网站建设网络公司镇江市网站
  • 平面设计与制作seo优化标题 关键词
  • 云瓣科技做网站360建网站
  • 开发一个软件大概需要多少钱优化营商环境应当坚持什么原则
  • 怎么做购物网站到线上广告接单平台
  • 全省建设信息网站搜索引擎营销的流程
  • 安庆微信网站开发网站维护收费标准
  • 响应式web网站自己的网站怎么推广
  • wordpress 印象码关键词优化排名软件