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

教做西餐的网站桂林森威建筑工程监理有限责任公司

教做西餐的网站,桂林森威建筑工程监理有限责任公司,网页设计与网站建设期末考试,怎样能创建一个网站SpringBoot自动配置自动加载controller的原理.md 好久没有更新自己的博客了,自己最近的正好有点空闲的时间进行,自己在写着写着,突然想起来, 为什么我们点击application就能自动加载Controller呢?(好家伙,我顿时鱼鳃,哈哈) 1.首先我们来到启动现场启动类 Sprin…SpringBoot自动配置自动加载controller的原理.md 好久没有更新自己的博客了,自己最近的正好有点空闲的时间进行,自己在写着写着,突然想起来, 为什么我们点击application就能自动加载Controller呢?(好家伙,我顿时鱼鳃,哈哈) 1.首先我们来到启动现场启动类 SpringBootApplication public class TestApplication extends SpringBootServletInitializer {Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {return builder.sources(ActAfterApplication.class);}public static void main(String[] args) {SpringApplication.run(ActAfterApplication.class, args);} }我们会看到在TestApplication启动类上会有一个注解:SpringBootApplication 这个注解,就是我们今天的文章的核心,核心**,核心**!!!你可能会说,我问怎么加载Controllerd的,你给我看这些干啥子?别急啊!大白(●—●),我们向下看 2.SpringBootApplication剖析 首先我们看点击这个注解进去的当中的三个关键注解 SpringBootConfigurationEnableAutoConfigurationComponentScan 这个注解就是我们为什么Spring会加载Controller组件关键所在 Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) Documented Inherited SpringBootConfiguration //重点 EnableAutoConfiguration //重点 ComponentScan(excludeFilters { //重点Filter(type FilterType.CUSTOM, classes TypeExcludeFilter.class),Filter(type FilterType.CUSTOM, classes AutoConfigurationExcludeFilter.class) }) public interface SpringBootApplication {3.SpringBootConfiguration: 这个注解作用标明此类为配置类,点进去发现就是Configuration,在加载时加载到Spring IOC中 你就把他想成是一个让他拥有配置的角色的作用就行啦 给他套个龙袍,当太子 Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) Documented Configuration //就是这个注解最关键 public interface SpringBootConfiguration {}4.EnableAutoConfiguration **作用:**这个注解可以说是Springboot的灵魂,自动配置,也就是将我们配置文件配置的配置类都加载进来, 它会扫描jar包下面的META-INF/spring.factories文件,将所有符合条件的自动配置类加载到IOC容器中是自动配置的核心 为什么?我们点进源码去看看呗,如下的源码,我们会看其中有两个核心的注解 (就是自动配置的关键,这两个注解说明,可以不看,忽略直接看下一个核心注解) 1.AutoConfigurationPackage 2.Import(AutoConfigurationImportSelector.class) Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) Documented Inherited AutoConfigurationPackage Import(AutoConfigurationImportSelector.class) public interface EnableAutoConfiguration {4.1 AutoConfigurationPackage 点击源码,我们会看到其中的一个: Import(AutoConfigurationPackages.Registrar.class) **作用:**借助Import注解导入符合自动配置类的集合,目的为了加载到IOC容器中 Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) Documented Inherited Import(AutoConfigurationPackages.Registrar.class) public interface AutoConfigurationPackage {AutoConfigurationPackages.Registrar.class的源码,这个可以直接忽略,感兴趣的可以看看 static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {Overridepublic void registerBeanDefinitions(AnnotationMetadata metadata,BeanDefinitionRegistry registry) {register(registry, new PackageImport(metadata).getPackageName()); //获取包名}Overridepublic SetObject determineImports(AnnotationMetadata metadata) {return Collections.singleton(new PackageImport(metadata));}}4.2Import(AutoConfigurationImportSelector.class) 这个类就更重要了,问什么这样说?让我们结合下面的源码一起解读(为了阅读的便利性,只保留所需源码的核心块) 根据引入的AutoConfigurationImportSelector中的selectImports方法,读取所有依赖的jar包下面也就是META-INF/spring.factories 下面的文件(怎么借加载此目录下面的呢?请看getCandidateConfigurations讲解)并且根据加载的条件加载项目所需要的类 通过这三个步骤,也就完成SpringBoot的自动加载 从而AutoConfigurationPackage执行结束 public class AutoConfigurationImportSelectorimplements DeferredImportSelector, BeanClassLoaderAware, ResourceLoaderAware,BeanFactoryAware, EnvironmentAware, Ordered {Overridepublic String[] selectImports(AnnotationMetadata annotationMetadata) {if (!isEnabled(annotationMetadata)) {return NO_IMPORTS;}AutoConfigurationMetadata autoConfigurationMetadata AutoConfigurationMetadataLoader.loadMetadata(this.beanClassLoader);AnnotationAttributes attributes getAttributes(annotationMetadata);ListString configurations getCandidateConfigurations(annotationMetadata,attributes);configurations removeDuplicates(configurations);SetString exclusions getExclusions(annotationMetadata, attributes);checkExcludedClasses(configurations, exclusions);configurations.removeAll(exclusions);configurations filter(configurations, autoConfigurationMetadata);fireAutoConfigurationImportEvents(configurations, exclusions);return StringUtils.toStringArray(configurations);}getCandidateConfigurations: 为了便于确认,我将AutoConfigurationImportSelector类下面此方法单独拎出来 z这个方法会读取所有的’META-INF/spring.factories’的依赖jar包, 获取spring.factories全名称,.其实下面的注解也写了 点击loadFactoryNames方法, 加载META-INF/spring.factories protected ListString getCandidateConfigurations(AnnotationMetadata metadata,AnnotationAttributes attributes) {ListString configurations SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());Assert.notEmpty(configurations,No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.);return configurations;}5.ComponentScan 前面的两个注解说完了,我们终于来到此注解,也是解开我心里疑惑的注解了 就特么我解释吗? 就是将我们注册Controller,Service,等注解自动扫描加到IOC容器中 ComponentScan(excludeFilters {Filter(type FilterType.CUSTOM, classes TypeExcludeFilter.class),Filter(type FilterType.CUSTOM, classes AutoConfigurationExcludeFilter.class) })6.META-INF/spring.factories 这个到底是什么鬼东西???说了半天,我们去看看,其实写这篇博客,按自己也很好奇,哈哈哈 我们走,一起去看看 https://blog.csdn.net/weixin_40017062/article/details/128710518
http://www.huolong8.cn/news/112948/

相关文章:

  • 网站建设和网站设计的区别局机关网站建设
  • 文明网站建设管理培训心得深圳三合一建设网站
  • 北京软件开发培训百度seo怎么提高排名
  • 温州敎玩具网站建设最低成本做企业网站
  • 建设专业网站运营团队wordpress调用随机文章
  • 信阳住房和城乡建设厅网站php网站开发实例视频
  • 金融软件网站建设公司排名做的好的网站开发
  • 上海景泰建设有限公司网站名师工作室网站建设 意义
  • 网站设计 企业 济南律师事务所网站设计方案
  • 小城镇建设网站的观点网站的数据库在哪里
  • 厦门网站制作计划网站开发是什么
  • 网站建设创业基础ppt模板企业信息查询免费软件
  • 专业的上海网站建设公司哪家好科技股份公司网站模板
  • wordpress 子网站重命名建筑设计参考网站
  • 网站开发php价格做婚介打么网站好
  • 手机免费建网站wordpress开发找工作
  • 网站 优点wordpress 发布时间
  • 彩票交易网站开发wordpress论坛建设
  • 把货卖到国外有哪些平台关键词排名优化系统
  • 长沙营销型网站制作互联网公司排行
  • 软件开发网站开发中国有多少个网站
  • 品牌建设网站有哪些做网站的是不是程序员
  • 做视频怎样传到网站做网站卖大闸蟹
  • 企业网站开发开题报告上海关键词优化按天计费
  • 网页制作模板的网站云优化网站建设
  • 遵义网站建设哪家好淘宝客做网站推广赚钱吗
  • 外贸建站服务推广公司做商品网站
  • 网站建设课程 谷建门户网站含义
  • 各种wordpress图片相册插件比较找一个网站做优化分析
  • 江门网站自助建站成都程序员培训机构