当前位置: 首页 > 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剖析

首先我们看点击这个注解进去的当中的三个关键注解

  1. @SpringBootConfiguration
  2. @EnableAutoConfiguration
  3. @ComponentScan ====> 这个注解就是我们为什么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 Set<Object> determineImports(AnnotationMetadata metadata) {return Collections.singleton(new PackageImport(metadata));}}

4.2@Import(AutoConfigurationImportSelector.class)

这个类就更重要了,问什么这样说?让我们结合下面的源码一起解读(为了阅读的便利性,只保留所需源码的核心块)

  1. 根据引入的AutoConfigurationImportSelector中的selectImports方法,
  2. 读取所有依赖jar包下面也就是META-INF/spring.factories 下面的文件(怎么借加载此目录下面的呢?===>请看getCandidateConfigurations讲解)
  3. 并且根据加载的条件加载项目所需要的类

通过这三个步骤,也就完成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);List<String> configurations = getCandidateConfigurations(annotationMetadata,attributes);configurations = removeDuplicates(configurations);Set<String> 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 List<String> getCandidateConfigurations(AnnotationMetadata metadata,AnnotationAttributes attributes) {List<String> 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.yayakq.cn/news/336100/

相关文章:

  • 除了做视频网站还能做什么网站餐饮店如何引流与推广
  • 衡水电商网站建设使用他人api做网站
  • 苏州住房和城乡建设厅网站太原做淘宝网站的
  • 如何向百度提交自己的网站校园网站建设实施方案
  • 商洛 网站建设跨境电商最火的产品
  • 企业平台网站建设方案加快政务网站群建设管理
  • 如何开发微信微网站页面紧急更新自动转跳直播
  • 深深圳市建设局网站网页设计个人实训报告
  • 物流那个网站做推广好wordpress企业主题下载地址
  • 装修公司网站dede模板做漫画网站的需求
  • 有专业做网站的吗网站公司网站建设流程王晴儿
  • 万江网站建设公司python 手机网站开发
  • 做百度手机网站关键词uniapp页面设计
  • 网站空间租用哪家好软件开发具体做什么
  • 如何做好网站建设前期网站规划一个完整网页的制作
  • jsp网站网站移动端推广
  • 网站做编辑器简单手机网站
  • 网站的互动下载百度软件
  • pc网站建设怎么弄网站建设明薇通网络价格美丽
  • js 取网站域名做企业网站需要准备什么
  • 惠州网站建设找哪个公司典型的o2o平台有哪些
  • 百度右边相关网站wordpress注册邮箱发送邮件
  • 盘石做的网站做网站的做网站麻烦吗
  • 国外电商网站如何建立网站后台 批量上传
  • 石家庄网站建设wsjzapp网站制作软件
  • 泰安网站制作排行户外拓展公司网站开发
  • 足球个人网站模板网站地图 格式
  • 电子商城网站建设的实训内容记述自建站平台
  • 网站新手引导怎么做陕西省建设协会岗位证查询网站
  • 本地网站建设公司邢台建站企业邮箱