博客
关于我
SpringBoot注解自动扫描-底层实现
阅读量:524 次
发布时间:2019-03-08

本文共 1473 字,大约阅读时间需要 4 分钟。

分析上文


@SpringBootApplicationpublic 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:持久层 等等
在这里插入图片描述
这就是约定大于配置

转载地址:http://fzyiz.baihongyu.com/

你可能感兴趣的文章
MySQL:判断逗号分隔的字符串中是否包含某个字符串
查看>>
MySQL:某个ip连接mysql失败次数过多,导致ip锁定
查看>>
MySQL:索引失效场景总结
查看>>
Mysql:避免重复的插入数据方法汇总
查看>>
MyS中的IF
查看>>
M_Map工具箱简介及地理图形绘制
查看>>
m_Orchestrate learning system---二十二、html代码如何变的容易
查看>>
M×N 形状 numpy.ndarray 的滑动窗口
查看>>
m个苹果放入n个盘子问题
查看>>
n = 3 , while n , continue
查看>>
n 叉树后序遍历转换为链表问题的深入探讨
查看>>
N!
查看>>
N-Gram的基本原理
查看>>
n1 c语言程序,全国青少年软件编程等级考试C语言经典程序题10道七
查看>>
Nacos Client常用配置
查看>>
nacos config
查看>>
Nacos Config--服务配置
查看>>
Nacos Derby 远程命令执行漏洞(QVD-2024-26473)
查看>>
Nacos 与 Eureka、Zookeeper 和 Consul 等其他注册中心的区别
查看>>
Nacos 单机集群搭建及常用生产环境配置 | Spring Cloud 3
查看>>