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

专业服务网站开发企业响应式网站建设

专业服务网站开发,企业响应式网站建设,滁州市建设局网站,大连网站制作团队什么是SpringBoot的自动装配 SpringBoot在启动的时候会扫描外部jar包中的META-INF/spring.factories文件,将文件中配置的类信息按照条件装配到Spring容器中。 实现原理 核心注解SpringBootApplication Target({ElementType.TYPE}) Retention(RetentionPolicy.R…

什么是SpringBoot的自动装配

SpringBoot在启动的时候会扫描外部jar包中的META-INF/spring.factories文件,将文件中配置的类信息按照条件装配到Spring容器中。
在这里插入图片描述

实现原理

核心注解@SpringBootApplication

@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 {
  • @Target指定注解的作用范围
  • @Retention指定注解的保留策略
  • @Documented该注解会被文档化
  • @Inherited父类的注解能够被子类继承
  • @SpringBootConfiguration把 @Configuration 注解做一个包装。
  • @ComponentScan指定扫描的策略
  • @EnableAutoConfiguration实现自动装配的核心注解

@EnableAutoConfiguration

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";Class<?>[] exclude() default {};String[] excludeName() default {};
}

AutoConfigurationImportSelector#selectImports,获取到配置的类集合。

    public String[] selectImports(AnnotationMetadata annotationMetadata) {if (!this.isEnabled(annotationMetadata)) {return NO_IMPORTS;} else {AutoConfigurationImportSelector.AutoConfigurationEntry autoConfigurationEntry = this.getAutoConfigurationEntry(annotationMetadata);return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());}}

AutoConfigurationImportSelector#getAutoConfigurationEntry,读取META-INF/spring.factories,获取配置类的集合,并进行合理的过滤。

protected AutoConfigurationImportSelector.AutoConfigurationEntry getAutoConfigurationEntry(AnnotationMetadata annotationMetadata) {if (!this.isEnabled(annotationMetadata)) {return EMPTY_ENTRY;} else {AnnotationAttributes attributes = this.getAttributes(annotationMetadata);List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);configurations = this.removeDuplicates(configurations);Set<String> exclusions = this.getExclusions(annotationMetadata, attributes);this.checkExcludedClasses(configurations, exclusions);configurations.removeAll(exclusions);configurations = this.getConfigurationClassFilter().filter(configurations);this.fireAutoConfigurationImportEvents(configurations, exclusions);return new AutoConfigurationImportSelector.AutoConfigurationEntry(configurations, exclusions);}
}protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.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;}

Spring Boot 通过@EnableAutoConfiguration开启自动装配,通过 SpringFactoriesLoader 最终加载META-INF/spring.factories中的自动配置类实现自动装配,自动配置类其实就是通过@Conditional按需加载的配置类,想要其生效必须引入spring-boot-starter-xxx包实现起步依赖。

http://www.yayakq.cn/news/614426/

相关文章:

  • 杭州 做网站百度网站排名
  • 网站轮播效果做论坛网站时应该注意什么
  • 网站设计 趋势wordpress注册不跳转
  • 医院网站建设规划wordpress大发
  • 网站制作关键技术电商网站开发需要什么语言
  • 如何做一名优秀的网站管理者个股期权网站开发
  • 专业简历制作网站推荐小程序搭建需要什么
  • 网站说明页命名淘宝上做网站行吗
  • 上海知名网站建设公司新公司名字注册查询
  • 网站的更新与维护网站建设维护公司
  • 朝阳网站建设怎么在百度创建网站
  • 私人网站建设可以做企业网站
  • 福州网站建设方案书网站建设业务员的话术
  • php网站迁移东莞网红打卡旅游景点
  • 做两个单页面网站大概多少钱云电脑平台哪个最好
  • 淘宝客如何做自己的网站photoshop快捷键命令大全
  • 建立网站一般那些阶段安徽省建设安全协会网站
  • 培训会网站建设云教育科技网站建设
  • 网站建设 亿安网络网站如何改字体
  • 什么网站上做推广效果比较好常见的网络营销方法及其效果
  • 中山微网站建设多少钱站群管理
  • 永嘉网站制作视频网站直播怎么做的
  • 福建省漳州市建设局网站吉林智能网站建设企业
  • 视觉做的比较好的国外网站网站优化升级怎么做
  • 网站建站企业制作外贸型网站
  • 网站建设合同书样本网站维护得多久
  • 高端网站设计上海网站建设上海网站的版式设计
  • 阿里巴巴国际站工作怎么样新乡手机网站建设官网
  • 好用的在线地图网站uo建设网站
  • 速成美站聊城网站建设的地方