分析上文Spring Boot快速入门


@SpringBootApplication
public class HelloWorldApplication {public static void main(String[] args) {//Spring应用启动起来SpringApplication.run(HelloWorldApplication.class,args);}
}

@SpringBootConfiguration:Spring Boot的配置类,我们点击进去查看
我们看到28行的注解
@EnableAutoConfiguration:开启自动配置的功能

以前我们使用三大框架时,很多东西需要自己在xml中配置,但现在Spring Boot帮我们自动配置-》就是该注解实现的
我们ctrl+右键点击该注解查看

@Import({AutoConfigurationImportSelector.class})
@Import:Spring的底层注解,向容器中导入一个组件
@AutoConfigurationPackage:添加该注解的类所在的package 作为 自动配置package 进行管理
点击@AutoConfigurationPackage注解进去查看源码

点击21行的Registrar.class

在该处打上断点,在debug模式下进行源码追踪
选中(String[])(new AutoConfigurationPackages.PackageImports(metadata)).getPackageNames().toArray(new String[0])-》右键-》Evaluate expression-》Evaluate
我们发现将@SpringBootApplication标注的类的所在包及其下面所有的子包的所有组件扫描到了Spring容器中所以我们必须将Controller、service、dao等放到主配置类所在包的子包中


@Import({AutoConfigurationImportSelector.class})
AutoConfigurationImportSelector.:导入哪些组件的选择器,将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;
断点追踪


有了上面的自动配置类,我们就不需要再手动编写;那么自动配置类是从哪里扫描到这些自动配置类呢

SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader())

我们点击loadFactoryNames查看进一步查看源码实现方式

springboot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就开始生效,帮我们进行配置工作
打开我们导入的包


查看web自动配置类点击查看源码


我们能够看到我们在SpringMVC中配置的很多功能,比如视图解析器(如上图所示)


J2EE的整体解决方案和自动配置都在spring-boot-autoconfigure-2.3.6.RELEASE.jar中
(比如我们熟悉的aop:事务,cache:缓存,dao:持久层 等等

这就是约定大于配置

SpringBoot注解自动扫描-底层实现相关推荐

  1. spring-boot注解详解(一)

    spring-boot注解详解(一) @SpringBootApplication @SpringBootApplication = (默认属性)@Configuration + @EnableAut ...

  2. SpringBoot注解把配置文件自动映射到属性和实体类实战

    SpringBoot注解把配置文件自动映射到属性和实体类实战 简介:讲解使用@value注解配置文件自动映射到属性和实体类 1.配置文件加载 方式一 1.Controller上面配置 @Propert ...

  3. 十、springboot注解式AOP(@Aspect)统一日志管理

    springboot注解式AOP(@Aspect)统一日志管理 简介 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功 ...

  4. SpringBoot注解大全(转)

    原文链接:[springBoot系列]--springBoot注解大全 一.注解(annotations)列表  @SpringBootApplication:包含了@ComponentScan.@C ...

  5. spring-boot注解详解(三)

    1.SpringBoot/spring @SpringBootApplication: 包含@Configuration.@EnableAutoConfiguration.@ComponentScan ...

  6. @configuration注解_超级全面的 SpringBoot 注解介绍,每一个用途都应该清晰

    一.注解(annotations)列表 1.@SpringBootApplication 包含了@ComponentScan.@Configuration和@EnableAutoConfigurati ...

  7. 【SpringBoot 】SpringBoot注解详解

    [SpringBoot ]SpringBoot注解详解 一.注解(annotations)列表  @SpringBootApplication:包含了@ComponentScan.@Configura ...

  8. 【java】JDK中注解的底层实现

    1.概述 转载:JDK中注解的底层实现 前提 用Java快三年了,注解算是一个常用的类型,特别是在一些框架里面会大量使用注解做组件标识.配置或者策略.但是一直没有深入去探究JDK中的注解到底是什么,底 ...

  9. SpringBoot : 注解@Resource

    1.美图 2.概述 在项目开发中,@Autowired和@Resource之争,一直搞不清楚,反正也不想搞清楚到底什么时候用@Autowired,什么场景下用@Resource,就一直用@Autowi ...

最新文章

  1. 机器学习新算法更好描述量子系统模型
  2. 两段用来启动/重启Linux下Tomcat的Perl脚本
  3. Android杂谈--layout的横竖屏处理
  4. STM32硬件错误HardFault_Handler的处理方法
  5. mybatis教程--实现增删改查的入门教程
  6. c# 通过字体对话框获取字体名称和字体大小_PS插件神器 :fonTags,超好用的PS字体管理插件(附安装方法)
  7. ELK+logback搭建日志系统
  8. C#学习笔记:预处理指令
  9. VUE3 项目自定义修改网页标题和图标
  10. 分糖果(信息学奥赛一本通-T1380)
  11. swift 2.1 安裝與下載
  12. “华为鸿蒙”操作系统下月发布?华为辟谣:请以官方声明为准
  13. Mysql查询去空格方法汇总
  14. 人工智能降噪插件Topaz DeNoise AI
  15. Armstrong 一个n位数等于各个位数n次方之和
  16. 多智能体强化学习- COMA
  17. 浙大计算机科学基础实验,想加实验室的看过来-浙大计算机实验室详细推介
  18. R语言数学建模(2):how to build a graph
  19. 2021年【大学生Python学习】社区小博主【孤寒者】的年度总结
  20. 创基MIFI扩展坞自带4G上网功能扩展坞

热门文章

  1. ASP.NET MVC 2 验证
  2. nchar,char,varchar与nvarchar区别
  3. 个人密码安全策略 [转载]
  4. 快评《19家网站内容低俗被曝光》
  5. 63个优秀测试网站地址【个人总结】
  6. 工业机器人电路图讲解话术_6张经典电路图分析助你进阶高级电工,你都会了吗?...
  7. python 对excel文件进行分词并进行词频统计_python 词频分析
  8. mysql 复杂sql 面试_PHP面试之复杂MySQL语句的编写
  9. linux raid卷,linux – Areca RAID卷和LVM对齐
  10. java代码调用python_java 直接调用python脚本,并传递参数代码实例|chu